Introduksjon til Generatorer: Effektiv Iterasjon med Yield
Generatorer forenkler lat evaluering ved å tilby en konsis og lesbar måte å lage iteratorer på. Mens en iterator implementeres som en klasse med metodene __iter__() og __next__(), implementeres en generator som en funksjon som bruker nøkkelordet yield for å produsere verdier én om gangen. Generatorer opprettholder automatisk sin tilstand mellom kall, noe som gjør dem mer intuitive og effektive for mange bruksområder.
En generator er en spesiell type funksjon som:
- Bruker nøkkelordet
yieldi stedet forreturn; - Pauser utførelsen og beholder sin tilstand når yield kalles;
- Gjenopptar utførelsen der den slapp når generatoren kalles igjen.
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}")
Forskjeller mellom iterator og generator
Swipe to start coding
I forrige oppgave implementerte du en uendelig terningkaster ved hjelp av en egendefinert iterator-klasse. Nå skal du forenkle den samme funksjonaliteten ved å bruke en generatorfunksjon. Generatorer gir en kortfattet og lesbar måte å produsere verdier på etter behov ved å bruke yield-nøkkelordet.
- Definer generatorfunksjonen. Bruk yield-nøkkelordet inne i
dice_roller-funksjonen for å produsere tilfeldige terningkast mellom1og6. Bruk funksjonenrandom.randint()for å simulere hvert kast. - Kall funksjonen
dice_roller()for å opprette et generatorobjekt og tildel det til variabelendice_generator. - Bruk en
for-løkke medenumerate()for å iterere over generatoren. Avslutt iterasjonen etter10kast ved hjelp av enif-betingelse ogbreak-setningen.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
What are some practical use cases for generators?
Can you explain how to convert an iterator to a generator?
Are there any limitations or drawbacks to using generators?
Awesome!
Completion rate improved to 3.13
Introduksjon til Generatorer: Effektiv Iterasjon med Yield
Sveip for å vise menyen
Generatorer forenkler lat evaluering ved å tilby en konsis og lesbar måte å lage iteratorer på. Mens en iterator implementeres som en klasse med metodene __iter__() og __next__(), implementeres en generator som en funksjon som bruker nøkkelordet yield for å produsere verdier én om gangen. Generatorer opprettholder automatisk sin tilstand mellom kall, noe som gjør dem mer intuitive og effektive for mange bruksområder.
En generator er en spesiell type funksjon som:
- Bruker nøkkelordet
yieldi stedet forreturn; - Pauser utførelsen og beholder sin tilstand når yield kalles;
- Gjenopptar utførelsen der den slapp når generatoren kalles igjen.
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}")
Forskjeller mellom iterator og generator
Swipe to start coding
I forrige oppgave implementerte du en uendelig terningkaster ved hjelp av en egendefinert iterator-klasse. Nå skal du forenkle den samme funksjonaliteten ved å bruke en generatorfunksjon. Generatorer gir en kortfattet og lesbar måte å produsere verdier på etter behov ved å bruke yield-nøkkelordet.
- Definer generatorfunksjonen. Bruk yield-nøkkelordet inne i
dice_roller-funksjonen for å produsere tilfeldige terningkast mellom1og6. Bruk funksjonenrandom.randint()for å simulere hvert kast. - Kall funksjonen
dice_roller()for å opprette et generatorobjekt og tildel det til variabelendice_generator. - Bruk en
for-løkke medenumerate()for å iterere over generatoren. Avslutt iterasjonen etter10kast ved hjelp av enif-betingelse ogbreak-setningen.
Løsning
Takk for tilbakemeldingene dine!
single