Python Iterator

Python Iterator

Ein Iterator ist ein Objekt, das die zählbare Anzahl von Werten enthält.

Ein Iterator ist ein iterierbares Objekt, was bedeutet, dass Sie alle Werte durchsuchen können.

Technisch gesehen ist ein Iterator in Python ein Objekt, das das Iterator-Protokoll implementiert und Methoden enthält __iter__() und __next__().

Iterator VS Iterierbares Objekt (Iterable)

Listen, Tuples, Dictionarys und Mengen sind iterierbare Objekte. Sie sind iterierbare Container, aus denen Sie Iteratoren (Iterator) erhalten können.

Alle diese Objekte haben Methoden, um Iteratoren zu erhalten iter() Methode:

Beispiel

Geben Sie von dem Tuple einen Iterator zurück und drucken Sie jeden Wert aus:

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

Führe Beispiel aus

Selbst der String ist ein iterierbares Objekt und kann Iteratoren zurückgeben:

Beispiel

Der String ist ebenfalls ein iterierbares Objekt und enthält eine Reihe von Zeichen:

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

Führe Beispiel aus

Durchsuchen Sie den Iterator

Wir können auch den for-Schleifenaufbau verwenden, um durch Iterierbare zu gehen:

Beispiel

Durchsuchen Sie die Werte des Tuples:

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

Führe Beispiel aus

Beispiel

Durchsuchen Sie die Zeichen im String:

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

Führe Beispiel aus

Hinweis:Der for-Schleifenaufbau erstellt tatsächlich ein Iterator-Objekt und führt für jede Schleifeniteration next() Methode.

Erstellung eines Iterators

Um ein Objekt/Klasse als Iterator zu erstellen, muss das Objekt eine __iter__() und __next__() Methode.

Wie Sie im Kapitel 'Python-Klasse/Objekt' gelernt haben, haben alle Klassen eine Methode namens __init__() Die Funktion, die es Ihnen ermöglicht, einige Initialisierungen bei der Erstellung von Objekten durchzuführen.

__iter__() Methoden haben eine ähnliche Funktion, Sie können Aktionen (Initialisierung usw.) ausführen, müssen aber immer das Iteratorobjekt selbst zurückgeben.

__next__() Methoden erlauben es Ihnen auch, Aktionen auszuführen und müssen das nächste Element der Sequenz zurückgeben.

Beispiel

Erstelle einen Iterator, der Zahlen zurückgibt, beginnt bei 1 und erhöht jede Sequenz um 1 (gibt 1, 2, 3, 4, 5 usw. zurück):

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))

Führe Beispiel aus

StopIteration

Wenn Sie genügend next() Anweisung verwenden oder in einem for-Schleifenaufbau verwenden, dann würde der obige Beispiel für immer weiterlaufen.

Um zu verhindern, dass die Iteration für immer weitergeht, können wir StopIteration Anweisung.

in __next__() In Methoden, können wir eine Stoppbedingung hinzufügen, um einen Fehler auszulösen, wenn die angegebene Anzahl an Iterationen abgeschlossen ist:

Beispiel

Stoppe nach 20 Iterationen:

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)

Führe Beispiel aus