Iteracja (ang. iteration) to proces w którym polecenia/instrukcje wykonywane są na elementach wybranej kolekcji typu stringi, listy, zestawy, słowniki, krotki.
Iterujemy wewnątrz pętli typu for lub while.
Uwaga! Termin "iteracja" w kontekście programowania ma dwa utarte znaczenia: jedno odnosi się do całego procesu iterowania przez dany obiekt, drugie do pojedynczego kroku takiej iteracji
(np. "kolejna iteracja pętli").
Iterowalny (ang. iterable) – to wszystko po czym można iterować/przechodzić.
Iterable posiada metodę zwracającą tzw. iterator. Ta metoda to `__iter__()`.
Listy, krotki, zestawy, słowniki i łańcuchy Pythona są iterowalne, ponieważ możesz iterować po ich elementach i uzyskiwać do nich dostęp — jeden po drugim.
Iterator (ang. iterator) to obiekt, który przeprowadza itetrację na obiektach iterowalnych i wie na którym elemencie w iterowalnym obiekcie aktualnie jesteśmy.
Tłumacząc prościej, iterator jest to nic innego jak obiekt pozwalający na sekwencyjny dostęp do kolejnych elementów zawartych w wybranych obiektach np. listach, zestawach, krotkach, słwonikach, ciągach.
Python udostępnia bardzo prosty sposób tworzenia iteratorów. Wystarczy, że
w klasie zdefiniujemy dwie metody:
__iter__() oraz
__ next__().
Są to specjalne metody zwane łącznie protokołem iteratora
metoda iter() zwraca obiekt naszego iteratora.
metoda next() zwraca nastepny element sekwencji. Po zakończeniu elementów zwraca wyjątek "stopiteration":
Przykład:
x=[1,2,3,4]
y=iter(x)
print(y)
<list_iterator object at 0x000001F2B8DDBFD0>
next(y)
1 #wynik
next(y)
2 #wynik
next(y)
3 #wynik
next(y)
4 #wynik
next(y)
StopIteration #wynik
Generator to funkcja, która zwraca iterator i ogólnie polega na tym że funkcja ta może zostać zatrzymana a następnie wznowiona od miejsca, w którym została wstrzymana.
Na podstawie zapamiętanego stanu możliwe jest zwracanie różnych wartości (iteratorów) podczas kolejnych wstrzymań funkcji.
Iteracja w łańcuchach Pythona
Iterowalny jest
łańcuch (ciąg) w pętli for:
Przykład:
for i in "bananik":
print(i)
wynik:
b
a
n
a
n
i
k