Iterator Python
- Poprzednia strona Inherytacja w Python
- Następna strona Zasięg zmiennych w Python
Iterator Python
Iterator jest obiektem, który zawiera liczbową liczbę wartości.
Iterator jest obiektem iterowalnym, co oznacza, że można przechodzić przez wszystkie wartości.
Technicznie rzecz biorąc, w Pythonie iterator jest obiektem realizującym protokół iteratora, który zawiera metody __iter__()
i __next__()
.
Iterator VS Obiekt Iterowalny (Iterable)
listy, krotki, słowniki i zbiorów są obiektami iterowalnymi. Są to kontenery iterowalne, z których można uzyskać iterator (Iterator).
Wszystkie te obiekty mają metodę do uzyskania iteratora iter()
Metoda:
Przykład
Zwróć iterator z krotki i wypisz każdą wartość:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Nawet łańcuch znaków jest obiektem iterowalnym i może zwracać iterator:
Przykład
Łańcuch znaków jest również obiektem iterowalnym, zawierającym serię znaków:
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
Przechodzenie przez iterator
Możemy również używać pętli for do przechodzenia przez obiekty iterowalne:
Przykład
Iterowanie przez wartości krotek:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Przykład
Iterowanie przez znaki w łańcuchu znaków:
mystr = "banana" for x in mystr: print(x)
Wskazówka:Petla for w rzeczywistości tworzy obiekt iteratora i wykona dla każdej iteracji next()
metoda.
tworzenie iteratora
Aby utworzyć obiekt/klasę jako iterator, musisz zaimplementować __iter__()
i __next__()
metoda.
Jak nauczyłeś się w rozdziale o klasach i obiektach w Pythonie, wszystkie klasy mają metodę o nazwie __init__()
Funkcja, która pozwala na wykonanie pewnych inicjalizacji podczas tworzenia obiektu.
__iter__()
Metoda działa podobnie, możesz wykonywać operacje (inicjalizacja itp.), ale zawsze musisz zwrócić obiekt iteratora.
__next__()
Metoda pozwala również na wykonywanie operacji i musi zwrócić następny element sekwencji.
Przykład
Stwórz iterator zwracający liczby, zaczynający od 1, zwiększający się o 1 w każdym ciągu (zwraca 1, 2, 3, 4, 5 itp.):
class MyNumbers: def __iter__(self): self.a = 1 zwróć siebie def __next__(self): x = self.a self.a += 1 zwróć x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
Jeśli masz wystarczająco next()
instrukcji, lub w pętli for, to powyższy przykład będzie trwał wiecznie.
Aby zapobiec wiecznej iteracji, możemy użyć StopIteration
instrukcji.
w __next__()
W metodzie, jeśli iteracja zostanie ukończona określoną liczbę razy, możemy dodać warunek końcowy, aby wywołać błąd:
Przykład
Zatrzymaj po 20 iteracjach:
class MyNumbers: def __iter__(self): self.a = 1 zwróć siebie def __next__(self): jeśli self.a <= 20: x = self.a self.a += 1 zwróć x else: wywołaj StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
- Poprzednia strona Inherytacja w Python
- Następna strona Zasięg zmiennych w Python