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.