Introduktion til Generatorer: Effektiv Iteration med Yield
Generatorer forenkler lazy evaluation ved at tilbyde en kortfattet og læsbar måde at oprette iteratorer på. Hvor en iterator implementeres som en klasse med metoderne __iter__() og __next__(), implementeres en generator som en funktion, der bruger nøgleordet yield til at returnere værdier én ad gangen. Generatorer bevarer automatisk deres tilstand mellem kald, hvilket gør dem mere intuitive og effektive til mange anvendelser.
En generator er en særlig type funktion, der:
- Bruger nøgleordet
yieldi stedet forreturn; - Pauser eksekveringen og bevarer sin tilstand, når yield kaldes;
- Genoptager eksekveringen fra det sted, hvor den slap, når generatoren kaldes igen.
123456789def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
12345678910import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
Forskelle mellem iterator og generator
Swipe to start coding
I den forrige opgave implementerede du en uendelig terningekaster ved hjælp af en brugerdefineret iterator-klasse. Nu skal du forenkle den samme funktionalitet ved at bruge en generatorfunktion. Generatorer giver en kortfattet og læsbar måde at producere værdier på efter behov ved hjælp af yield-nøgleordet.
- Definér generatorfunktionen. Brug nøgleordet yield inde i funktionen
dice_rollertil at generere tilfældige terningekast mellem1og6. Brug funktionenrandom.randint()til at simulere hvert kast. - Kald funktionen
dice_roller()for at oprette et generatorobjekt og tildel det til variablendice_generator. - Brug en
for-løkke medenumerate()til at iterere over generatoren. Stop iterationen efter10kast ved hjælp af enif-betingelse ogbreak-udsagnet.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 3.13
Introduktion til Generatorer: Effektiv Iteration med Yield
Stryg for at vise menuen
Generatorer forenkler lazy evaluation ved at tilbyde en kortfattet og læsbar måde at oprette iteratorer på. Hvor en iterator implementeres som en klasse med metoderne __iter__() og __next__(), implementeres en generator som en funktion, der bruger nøgleordet yield til at returnere værdier én ad gangen. Generatorer bevarer automatisk deres tilstand mellem kald, hvilket gør dem mere intuitive og effektive til mange anvendelser.
En generator er en særlig type funktion, der:
- Bruger nøgleordet
yieldi stedet forreturn; - Pauser eksekveringen og bevarer sin tilstand, når yield kaldes;
- Genoptager eksekveringen fra det sted, hvor den slap, når generatoren kaldes igen.
123456789def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
12345678910import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
Forskelle mellem iterator og generator
Swipe to start coding
I den forrige opgave implementerede du en uendelig terningekaster ved hjælp af en brugerdefineret iterator-klasse. Nu skal du forenkle den samme funktionalitet ved at bruge en generatorfunktion. Generatorer giver en kortfattet og læsbar måde at producere værdier på efter behov ved hjælp af yield-nøgleordet.
- Definér generatorfunktionen. Brug nøgleordet yield inde i funktionen
dice_rollertil at generere tilfældige terningekast mellem1og6. Brug funktionenrandom.randint()til at simulere hvert kast. - Kald funktionen
dice_roller()for at oprette et generatorobjekt og tildel det til variablendice_generator. - Brug en
for-løkke medenumerate()til at iterere over generatoren. Stop iterationen efter10kast ved hjælp af enif-betingelse ogbreak-udsagnet.
Løsning
Tak for dine kommentarer!
single