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)