Iterator to element, który zawiera policzalną liczbę cech.

Iterator jest elementem, który może być iterowany po, co oznacza, że można poruszać się po każdej z tych cech.

Technicznie, w Pythonie, iterator jest obiektem, który implementuje protokół iteratora, który składa się z metod __iter__() i __next__().

Iterator kontra Iterable

Rekordy, tuplety, odniesienia do słów i zestawy są w większości iterowalne. Są to uchwyty iteracyjne, od których można uzyskać iterator.

Każdy z tych elementów posiada technikę iter(), która jest używana do uzyskania iteratora:

Przykład

Zwróć iterator z tupla i wydrukuj każdą wartość:

mytuple = (“jabłko”, “banan”, “wiśnia”)
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

Nawet struny są obiektami iteracyjnymi i mogą zwrócić iterator:

Przykład

Łańcuchy są również obiektami iteracyjnymi, zawierającymi sekwencję znaków:

mystr = “banan”
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Pętla przez Iterator

Możemy również użyć pętli do iteracji przez iterowalny obiekt:

Przykład

Iterują wartości tupetu:

mytuple = (“jabłko”, “banan”, “wiśnia”)

dla x w mytuple:
druk(x)

Zrób Iterator

Aby stworzyć element/klasę jako iterator musisz wykonać techniki __iter__() i __next__() do swojego artykułu.

Jak nauczyłeś się w części Python Classes/Items, wszystkie klasy mają zdolność __init__(), która pozwala na wprowadzenie, gdy artykuł jest tworzony.

Technika __iter__() działa porównywalnie, możesz wykonywać zadania (instynktowanie i tak dalej), ale powinna konsekwentnie przywracać sam obiekt iteratora.

Technika __next__() dodatkowo pozwala na wykonywanie czynności, i musi przywrócić w grupowaniu następującą rzecz.

Przykład

Stwórz iterator, który zwraca liczby, począwszy od 1, a każda sekwencja zwiększy się o jeden (zwracając 1,2,3,4,5 itd.):

klasa MyNumbers:
def __iter__(self):
self.a = 1
wracać do siebie

W porządku:
x = self.a
self.a += 1
powrót x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))

print(next(myiter))
print(next(myiter))

StopIteration

Powyższy model postępowałby zawsze w przypadku, gdybyś miał wystarczająco dużo od razu() głoszeń, lub w przypadku, gdyby został wykorzystany w okręgu.

Aby nie dopuścić do sytuacji, w której nacisk zostanie położony na wieczność, możemy skorzystać z wyjaśnienia StopIteration.

W metodzie __next__(), możemy dodać warunek zakończenia, aby podnieść błąd, jeśli iteracja zostanie wykonana określoną liczbę razy:

Przykład

Zatrzymaj się po 20 iteracjach:

klasy MyNumbers:
def __iter__(self):
self.a = 1
wracać do siebie

W porządku:
jeśli self.a <= 20:
x = self.a
self.a += 1
powrót x
Inaczej:
podnieść StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

dla x w myiterze:
druk(x)