Python Iterator

Python Iterator

Een iterator is een object dat het aantal meetbare waarden bevat.

Een iterator is een iterable object, wat betekent dat je door alle waarden kunt lopen.

Technisch gezien is een iterator in Python een object dat de iterator protocol implementeert, het bevat methoden __iter__() en __next__().

Iterator VS Iterable object

Lijsten, tuples, dictionaries en sets zijn iterable objecten. Ze zijn iterable containers waaruit je een iterator (Iterator) kunt verkrijgen.

Alle deze objecten hebben een methode om een iterator te verkrijgen iter() Methode:

Instance

Van een tuple een iterator retourneren en elke waarde afdrukken:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))

Run Instance

Zelfs strings zijn iterable objecten en kunnen een iterator retourneren:

Instance

Stringen zijn ook iterable objecten die een reeks tekens bevatten:

mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Run Instance

Loopen door iterator

We kunnen ook de for-lus gebruiken om door een iterable object te loopen:

Instance

Itereer over de waarden van de tuple:

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
  print(x)

Run Instance

Instance

Itereer over de tekens in de string:

mystr = "banana"
for x in mystr:
  print(x)

Run Instance

Tip:De for-lus maakt eigenlijk een iteratorobject aan en voert voor elke loopuitvoering next() methode.

iterator aanmaken

Om een object/klasse te maken als een iterator, moet je een iterator implementeren voor het object __iter__() en __next__() methode.

Zoals je hebt geleerd in het hoofdstuk over Python klassen/objecten, hebben alle klassen een methode genaamd __init__() De functie die het mogelijk maakt om enkele initialisaties uit te voeren bij het aanmaken van een object.

__iter__() Method serves a similar purpose, you can perform operations (initialization, etc.), but you must always return the iterator object itself.

__next__() Method also allows you to perform operations and must return the next item in the sequence.

Instance

Create an iterator that returns numbers, starting from 1, each sequence will increase by 1 (return 1, 2, 3, 4, 5, etc.):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    x = self.a
    self.a += 1
    return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

Run Instance

StopIteration

If you have enough next() statement, or in a for loop, then the above example will continue indefinitely.

To prevent iteration from continuing indefinitely, we can use StopIteration statement.

in __next__() In a method, if the iteration completes the specified number of times, we can add a termination condition to raise an error:

Instance

Stop after 20 iterations:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
  print(x)

Run Instance