Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Inzicht in Iterators in Python | Beheersing van Iterators en Generators in Python
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Python Structureel Programmeren

bookInzicht in Iterators in Python

Wat zijn iterators?

Technisch gezien is een iterator in Python een object dat het iteratorprotocol implementeert, dat bestaat uit de volgende methoden:

  • __iter__(): retourneert het iteratorobject zelf, waardoor het compatibel is met lussen zoals for;
  • __next__(): retourneert het volgende element in de reeks. Wanneer er geen elementen meer zijn, wordt een StopIteration-exceptie opgegooid om het einde van de iteratie aan te geven.

Een iterator maakt het mogelijk om elementen in een iterable (bijvoorbeeld een lijst of string) één voor één te doorlopen, terwijl de positie wordt bijgehouden.

iterator = iter(iterable)

Opmerking

Een iterator is ook een iterable omdat deze de methode __iter__() implementeert.

Niet alle iterables zijn iterators. Bijvoorbeeld, een lijst is een iterable maar geen iterator. Wanneer je deze doorgeeft aan de functie iter(), krijg je een iterator waarmee je element voor element kunt doorlopen.

Een eigen iterator bouwen

Deze iterator genereert een vast aantal willekeurige dobbelsteenworpen en stopt zodra alle worpen zijn uitgevoerd.

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

Iterator-uitputting

Een iterator kan na uitputting niet opnieuw worden gebruikt zonder deze opnieuw te maken. Bijvoorbeeld:

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

Iterators kunnen slechts één keer worden doorlopen. Om opnieuw te itereren, moet een nieuwe iterator worden aangemaakt.

Taak

Swipe to start coding

Vul de ontbrekende delen van de code aan om een aangepaste iterator-klasse te implementeren voor het simuleren van een oneindige dobbelsteenwerper. De iterator moet op een luie manier willekeurige worpen van een zeszijdige dobbelsteen genereren en stoppen na 10 worpen.

  1. De methode __iter__() maakt het mogelijk om een object als iterator te gebruiken.
  2. De methode __next__() levert de volgende willekeurige dobbelsteenworp op (een getal tussen 1 en 6).
  3. Maak een instantie van de klasse InfiniteDie, die de dobbelsteenwerper voorstelt.
  4. Gebruik een for-lus met enumerate() om de dobbelsteen lui te werpen. Stop na 10 worpen met behulp van een if-voorwaarde en de break-instructie.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 6. Hoofdstuk 2
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookInzicht in Iterators in Python

Veeg om het menu te tonen

Wat zijn iterators?

Technisch gezien is een iterator in Python een object dat het iteratorprotocol implementeert, dat bestaat uit de volgende methoden:

  • __iter__(): retourneert het iteratorobject zelf, waardoor het compatibel is met lussen zoals for;
  • __next__(): retourneert het volgende element in de reeks. Wanneer er geen elementen meer zijn, wordt een StopIteration-exceptie opgegooid om het einde van de iteratie aan te geven.

Een iterator maakt het mogelijk om elementen in een iterable (bijvoorbeeld een lijst of string) één voor één te doorlopen, terwijl de positie wordt bijgehouden.

iterator = iter(iterable)

Opmerking

Een iterator is ook een iterable omdat deze de methode __iter__() implementeert.

Niet alle iterables zijn iterators. Bijvoorbeeld, een lijst is een iterable maar geen iterator. Wanneer je deze doorgeeft aan de functie iter(), krijg je een iterator waarmee je element voor element kunt doorlopen.

Een eigen iterator bouwen

Deze iterator genereert een vast aantal willekeurige dobbelsteenworpen en stopt zodra alle worpen zijn uitgevoerd.

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

Iterator-uitputting

Een iterator kan na uitputting niet opnieuw worden gebruikt zonder deze opnieuw te maken. Bijvoorbeeld:

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

Iterators kunnen slechts één keer worden doorlopen. Om opnieuw te itereren, moet een nieuwe iterator worden aangemaakt.

Taak

Swipe to start coding

Vul de ontbrekende delen van de code aan om een aangepaste iterator-klasse te implementeren voor het simuleren van een oneindige dobbelsteenwerper. De iterator moet op een luie manier willekeurige worpen van een zeszijdige dobbelsteen genereren en stoppen na 10 worpen.

  1. De methode __iter__() maakt het mogelijk om een object als iterator te gebruiken.
  2. De methode __next__() levert de volgende willekeurige dobbelsteenworp op (een getal tussen 1 en 6).
  3. Maak een instantie van de klasse InfiniteDie, die de dobbelsteenwerper voorstelt.
  4. Gebruik een for-lus met enumerate() om de dobbelsteen lui te werpen. Stop na 10 worpen met behulp van een if-voorwaarde en de break-instructie.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 6. Hoofdstuk 2
single

single

some-alt