Treci la conținutul principal

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ă.

Prompt
Scrie un program Python cu șablonul Iterator: o clasă Playlist care își păstrează lista de melodii ascunsă și implementează iter ca generator care produce fiecare melodie. Parcurge playlistul cu o buclă for și afișează fiecare melodie.
Ieșire: program Python complet

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.