Ein Iterator ist ein Gegenstand, der eine zählbare Anzahl von Eigenschaften enthält.
Ein Iterator ist ein Element, das nachher iteriert werden kann, was impliziert, dass Sie durch jede einzelne der Eigenschaften navigieren können.
Technisch gesehen ist ein Iterator in Python ein Objekt, das das Iteratorprotokoll implementiert, das aus den Methoden __iter__() und __next__() besteht.
Iterator versus Iterierbar
Datensätze, Tupel, Wortreferenzen und Sets sind zum größten Teil iterierbare Elemente. Sie sind iterierbare Halter, von denen Sie einen Iterator erhalten können.
Jedes dieser Elemente verfügt über eine iter()-Technik, die verwendet wird, um einen Iterator zu erhalten:
Beispiel
Geben Sie einen Iterator aus einem Tupel zurück und drucken Sie jeden Wert aus:
Mytupel = (“Apfel”, “Banane”, “Kirsche”)
myit = iter(Mytupel)
drucken(next(myit))
drucken(next(myit))
drucken(next(myit))
Auch Zeichenfolgen sind iterierbare Objekte und können einen Iterator zurückgeben:
Beispiel
Strings sind ebenfalls iterierbare Objekte, die eine Folge von Zeichen enthalten:
mystr = “Banane”.
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))print(
next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Schleifen durch einen Iterator
Wir können auch eine for-Schleife verwenden, um durch ein iterierbares Objekt zu iterieren:
Beispiel
Iterieren Sie die Werte eines Tupels:
Mytupel = (“Apfel”, “Banane”, “Kirsche”)
für x in Mytupel:
drucken(x)
Einen Iterator herstellen
Um einen Artikel/Klasse als Iterator zu erstellen, müssen Sie die Techniken __iter__() und __next__() zu Ihrem Artikel ausführen.
Wie Sie im Teil Python-Klassen/Elemente gelernt haben, haben alle Klassen eine Kapazität namens __init__(), die es Ihnen erlaubt, bei der Erstellung des Artikels einige Einführungen vorzunehmen.
Die __iter__()-Technik verhält sich vergleichbar, Sie können Aufgaben ausführen (instanziieren und so weiter.), sollten aber das Iteratorobjekt selbst konsistent wiederherstellen.
Mit der __next__()-Technik können Sie zusätzlich Aktivitäten durchführen und müssen Folgendes in der Gruppierung wiederherstellen
Beispiel
Erstellen Sie einen Iterator, der Zahlen zurückgibt, beginnend mit 1, und jede Sequenz wird um eins erhöht (gibt 1,2,3,4,5 usw. zurück):
Klasse MyNumbers: def __iter__(self): self.a = 1
return self
def __next__(selbst):
x = selbst.a selbst.a += 1
Rückgabe x
myclass = MeineNummern()
myiter = iter(meineKlasse)
drucken(next(myiter))
drucken(next(myiter))
drucken(next(myiter))
drucken(nächste(myiter))
drucken(nächste(myiter))
StopIteration
Das obige Modell würde immer dann angewendet werden, wenn Sie genug sofortige() Proklamationen hatten oder wenn es in einem for-Kreis verwendet wurde.
Um der Betonung vorzubeugen, mit der wir ständig weitermachen wollen, können wir die Erklärung der StopIteration verwenden.
In der Methode __next__() können wir eine Abbruchbedingung hinzufügen, um einen Fehler auszulösen, wenn die Iteration eine bestimmte Anzahl von Malen durchgeführt wird:
Beispiel
Stopp nach 20 Iterationen:
Klasse MyNumbers: def __iter__(self): self.a = 1
return self
def __next__(self):
wenn self.a <= 20:
x = self.a
self.a += 1
return x
sonst: StopIteration
erhöhen
myclass = MeineNummern()
myiter = iter(meineKlasse)
für x in myiter:
drucken(x)