Python supporta il concetto di iterazione attraverso i contenitori, implementato usando due distinti metodi; questi vengono usati per consentire alle classi definite dall'utente il supporto all'iterazione. Le sequenze, descritte qui sotto con maggiore dettaglio, supportano sempre i metodi iterativi.
Un metodo ha bisogno di essere definito per contenere oggetti che forniscano il supporto iterativo:
| ) |
Gli stessi oggetti iteratori vengono richiesti per supportare i seguenti due metodi, che formano insieme il protocollo iteratore:
| ) |
| ) |
Python definisce molti oggetti iteratori per supportare l'iterazione su tipi di sequenze generali e specifiche, dizionari, e altre forme pi� specializzate. I tipi specifici non sono importanti, aldil� della loro implementazione del protocollo iteratore.
L'intenzione del protocollo � quella che quando un metodo iteratore next() solleva un'eccezione StopIteration, esso continuer� lo stesso in una chiamata successiva. Le esecuzioni che non obbediscono a questa propriet� vengono ritenute interrotte. (Questo vincolo � stato aggiunto in Python 2.3; in Python 2.2, i vari iteratori vengono interrotti secondo questa regola.)
I generatori di Python forniscono un modo conveniente per implementare il protocollo iteratore. Se il metodo dell'oggetto contenitore __iter__() viene implementato come un generatore, esso restituir� automaticamente un oggetto iteratore (tecnicamente, un oggetto generatore) sopperendo ai metodi __iter__() e next().
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.