yield_stmt |
::= | "yield" expression_list |
L'istruzione yield viene usata solo quando si definisce una funzione generatore e viene usata solo nel corpo della funzione generatore. L'uso dell'istruzione yield nella definizione di una funzione � sufficiente a creare una funzione generatore invece che una normale funzione.
Quando viene chiamata, una funzione generatore restituisce un iteratore conosciuto come un generatore iteratore, o pi� comunemente, un generatore. Il corpo della funzione generatore viene eseguito da una chiamata reiterata al metodo next() del generatore fino al sollevamento di un'eccezione.
Quando viene eseguita l'istruzione yield, lo stato del generatore viene congelato ed il valore dell'expression_list viene restituita alla chiamata next(). Per ``congelata'' si intende che tutto lo stato locale viene conservato, inclusi i legami correnti delle variabili locali, il puntatore all'istruzione e lo stack di valutazione interno: sono salvate sufficienti informazioni, cosicch� la prossima volta che viene invocato next(), la funzione possa procedere esattamente come se l'istruzione yield fosse una chiamata dall'esterno.
L'istruzione yield non � permessa nella clausola try di un costrutto try ... finally. La difficolt� � che non c'� garanzia che il generatore verr� ripreso, quindi non c'� garanzia che il blocco finally sia eseguito.
generatori. Sar� sempre
abilitata in Python 2.3. L'istruzione import __future__ pu�
essere usata per abilitare questa caratteristica:
from __future__ import generators
Vedete anche:
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.