Iteratory dla zainteresowanych
Co to są iteratory
W Pythonie iterator to obiekt, po którym można „przechodzić krok po kroku”, zwykle za pomocą pętli for.
Każdy kolejny krok nazywa się iteracją.
Można to porównać do:
czytania książki strona po stronie,
wyjmowania kartek z pudełka jedna po drugiej,
sprawdzania elementów listy od początku do końca.
Większość struktur danych w Pythonie — takich jak listy, napisy czy słowniki — jest iterowalna, czyli może zwrócić iterator.
Iterator:
pamięta swoją aktualną pozycję,
zwraca kolejny element przy każdym wywołaniu
next()kończy działanie zgłaszając wyjątek
StopIteration.
Jak działa iterator?
Każdy obiekt iterowalny może
utworzyć iterator za pomocą funkcji
iter(),zwrócić kolejne elementy za pomocą
next().
To właśnie pętla for używa iteratorów w tle, choć tego nie widzimy.
Ręczne użycie iteratora
Własny iterator (prosty licznik)
Tworzymy klasę, która potrafi być iteratorem, bo ma dwie metody:
__iter__()- zwraca siebie__next__()- zwraca kolejną wartość
Inny sposób— generator (prostszy sposób)
To samo można zapisać łatwiej korzystając generatora funkcji.
yield to specjalna instrukcja w Pythonie używana w generatorach.
Generator to funkcja, która zwraca kolejne wartości w trakcie działania, zamiast zwracać całą listę naraz.
Główne cechy yield:
Zatrzymuje działanie funkcji w miejscu
yield, pamiętając stan zmiennych.Zwraca wartość do miejsca wywołania (np. do pętli
for).Pozwala wznowić funkcję od miejsca zatrzymania przy kolejnym wywołaniu
next().