Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduksjon til Generatorer: Effektiv Iterasjon med Yield | Mestre Iteratorer og Generatorer i Python
Python Strukturert Programmering

bookIntroduksjon 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:

  1. Bruker nøkkelordet yield i stedet for return;
  2. Pauser utførelsen og beholder sin tilstand når yield kalles;
  3. Gjenopptar utførelsen der den slapp når generatoren kalles igjen.
123456789
def 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
copy
12345678910
import 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}")
copy

Forskjeller mellom iterator og generator

Oppgave

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.

  1. Definer generatorfunksjonen. Bruk yield-nøkkelordet inne i dice_roller-funksjonen for å produsere tilfeldige terningkast mellom 1 og 6. Bruk funksjonen random.randint() for å simulere hvert kast.
  2. Kall funksjonen dice_roller() for å opprette et generatorobjekt og tildel det til variabelen dice_generator.
  3. Bruk en for-løkke med enumerate() for å iterere over generatoren. Avslutt iterasjonen etter 10 kast ved hjelp av en if-betingelse og break-setningen.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 6. Kapittel 4
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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?

close

bookIntroduksjon 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:

  1. Bruker nøkkelordet yield i stedet for return;
  2. Pauser utførelsen og beholder sin tilstand når yield kalles;
  3. Gjenopptar utførelsen der den slapp når generatoren kalles igjen.
123456789
def 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
copy
12345678910
import 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}")
copy

Forskjeller mellom iterator og generator

Oppgave

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.

  1. Definer generatorfunksjonen. Bruk yield-nøkkelordet inne i dice_roller-funksjonen for å produsere tilfeldige terningkast mellom 1 og 6. Bruk funksjonen random.randint() for å simulere hvert kast.
  2. Kall funksjonen dice_roller() for å opprette et generatorobjekt og tildel det til variabelen dice_generator.
  3. Bruk en for-løkke med enumerate() for å iterere over generatoren. Avslutt iterasjonen etter 10 kast ved hjelp av en if-betingelse og break-setningen.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 6. Kapittel 4
single

single

some-alt