Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Forståelse af Iteratorer i Python | Mestring af Iteratorer og Generatorer i Python
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Python Strukturel Programmering

bookForståelse af Iteratorer i Python

Hvad er iteratorer?

Teknisk set er en iterator i Python et objekt, der implementerer iteratorprotokollen, som består af følgende metoder:

  • __iter__(): returnerer selve iteratorobjektet, hvilket gør det kompatibelt med løkker som for;
  • __next__(): returnerer det næste element i sekvensen. Når der ikke er flere elementer, udløser den en StopIteration-undtagelse for at signalere slutningen af gennemløbet.

En iterator muliggør gennemløb af elementer i en iterable (f.eks. liste eller streng) ét ad gangen, mens den holder styr på sin position.

iterator = iter(iterable)

Bemærk

En iterator er også en iterable, fordi den implementerer metoden __iter__().

Ikke alle iterables er iteratorer. For eksempel er en liste iterable, men ikke en iterator. Når du sender den til funktionen iter(), får du en iterator, der muliggør gennemløb element for element.

Oprettelse af en brugerdefineret iterator

Denne iterator genererer et fast antal tilfældige terningekast og stopper, når alle kast er udført.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Udtømning af iterator

Når en iterator er udtømt, kan den ikke genbruges uden at blive genskabt. For eksempel:

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Iteratorer kan kun gennemløbes én gang. For at iterere igen skal der oprettes en ny iterator.

Opgave

Swipe to start coding

Udfyld de manglende dele af koden for at implementere en brugerdefineret iterator-klasse til at simulere en uendelig terningekaster. Iteratoren skal lazily generere tilfældige kast med en seks-sidet terning og stoppe efter 10 kast.

  1. Metoden __iter__() gør det muligt at bruge et objekt som en iterator.
  2. Metoden __next__() producerer det næste tilfældige terningekast (et tal mellem 1 og 6).
  3. Opret en instans af klassen InfiniteDie, som repræsenterer terningekasteren.
  4. Brug en for-løkke med enumerate() til at kaste terningen lazily. Stop efter 10 kast ved hjælp af en if-betingelse og break-sætningen.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 6. Kapitel 2
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

Can you explain the difference between an iterator and an iterable in more detail?

How can I create my own custom iterator for a different use case?

What happens if I try to use an exhausted iterator again?

close

bookForståelse af Iteratorer i Python

Stryg for at vise menuen

Hvad er iteratorer?

Teknisk set er en iterator i Python et objekt, der implementerer iteratorprotokollen, som består af følgende metoder:

  • __iter__(): returnerer selve iteratorobjektet, hvilket gør det kompatibelt med løkker som for;
  • __next__(): returnerer det næste element i sekvensen. Når der ikke er flere elementer, udløser den en StopIteration-undtagelse for at signalere slutningen af gennemløbet.

En iterator muliggør gennemløb af elementer i en iterable (f.eks. liste eller streng) ét ad gangen, mens den holder styr på sin position.

iterator = iter(iterable)

Bemærk

En iterator er også en iterable, fordi den implementerer metoden __iter__().

Ikke alle iterables er iteratorer. For eksempel er en liste iterable, men ikke en iterator. Når du sender den til funktionen iter(), får du en iterator, der muliggør gennemløb element for element.

Oprettelse af en brugerdefineret iterator

Denne iterator genererer et fast antal tilfældige terningekast og stopper, når alle kast er udført.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Udtømning af iterator

Når en iterator er udtømt, kan den ikke genbruges uden at blive genskabt. For eksempel:

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Iteratorer kan kun gennemløbes én gang. For at iterere igen skal der oprettes en ny iterator.

Opgave

Swipe to start coding

Udfyld de manglende dele af koden for at implementere en brugerdefineret iterator-klasse til at simulere en uendelig terningekaster. Iteratoren skal lazily generere tilfældige kast med en seks-sidet terning og stoppe efter 10 kast.

  1. Metoden __iter__() gør det muligt at bruge et objekt som en iterator.
  2. Metoden __next__() producerer det næste tilfældige terningekast (et tal mellem 1 og 6).
  3. Opret en instans af klassen InfiniteDie, som repræsenterer terningekasteren.
  4. Brug en for-løkke med enumerate() til at kaste terningen lazily. Stop efter 10 kast ved hjælp af en if-betingelse og break-sætningen.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 6. Kapitel 2
single

single

some-alt