Ce este
Șablonul Iterator parcurge o colecție fără să arate cum este stocată. Cel care îl apelează întreabă „mai există elemente?” și „dă-mi-l pe următorul” — dacă datele stau într-o listă, într-un arbore sau într-o bază de date rămâne ascuns.
Pentru listele și dicționarele obișnuite, bucla for din Python este deja iteratorul tău. Șablonul contează atunci când stocarea este ascunsă sau parcurgerea este complicată — iar răspunsul Python este __iter__: implementează această metodă, de multe ori ca generator, și orice obiect funcționează cu for ... in.
Exemplu: parcurgerea unui playlist
Playlistul își păstrează melodiile ascunse. El implementează __iter__ ca generator care produce câte o melodie pe rând — stocarea din spatele lui s-ar putea schimba complet fără să strice vreun cod care îl folosește.
Un generator face parcurgerea
Bucla nu atinge niciodată lista din interiorul playlistului. Înlocuiește lista cu o listă înlănțuită sau cu încărcare leneșă, iar aceeași buclă for rulează în continuare neschimbată.
Ieșire: program Python complet
from typing import Iterator
class Playlist:
def __init__(self, songs: list[str]) -> None:
self._songs = songs
# Iteratorul parcurge colecția fără să expună lista.
def __iter__(self) -> Iterator[str]:
for song in self._songs:
yield song
playlist = Playlist(["intro", "verse", "chorus"])
for song in playlist:
print("se redă:", song)
Când să îl folosești
Folosește-l când interiorul colecției trebuie să rămână ascuns, când parcurgerea nu este simplă (arbori, pagini de la un API) sau când ai nevoie de mai multe parcurgeri independente în același timp.
Renunță la el pentru listele și dicționarele din propriul cod — o buclă direct peste ele este mai scurtă, mai rapidă și cunoscută de orice cititor.
Avantaje și dezavantaje
Avantaje: stocarea rămâne ascunsă și poate fi schimbată; mai multe parcurgeri pot rula independent — fiecare buclă for primește un generator nou; o parcurgere complicată este scrisă o singură dată.
Dezavantaje: mai mult cod decât o buclă directă; un iterator activ peste o colecție care se modifică este o sursă clasică de erori subtile.