yield_stmt |
::= | "yield" expression_list |
Instrukcja yield jest używana wyłącznie przy definiowaniu funkcji generującej i występuje wówczas w jej treści. Użycie wewnątrz definicji funkcji instrukcji yield jest warunkiem wystarczającym, aby stała się ona funkcją generującą, zamiast zwykłej funkcji.
Wywołanie funkcji generującej zwraca tak zwany iterator generujący, lub po prostu generator. Wykonywanie treści funkcji generującej następuje każdorazowo po wywołaniu metody next() generatora, aż do czasu, gdy funkcja wygeneruje wyjątek.
Przy wykonywaniu instrukcji yield następuje zamrożenie stanu generatora, a wartość wyrażenia podanego po słowie yield jest przekazywana do punktu wywołania metody next(). "Zamrożenie" oznacza w tym przypadku zapamiętanie całego stanu lokalnego, wraz z istniejącymi lokalnymi dowiązaniami nazw, wskaźnikiem instrukcji oraz wewnętrznym stosem wartościowania: zachowywana jest wystarczająca ilość informacji, aby przy kolejnym wywołaniu metody next() wykonywanie funkcji mogło być kontynuowane tak, jakby instrukcja yield była zwykłym wywołaniem funkcji.
Użycie instrukcji yield nie jest dozwolone w klauzuli try konstrukcji try ... finally. Ograniczenie wynika z tego, że nie ma żadnych gwarancji przyszłego wznowienia generatora, więc nie ma też gwarancji, że byłby kiedykolwiek wykonany zestaw klauzuli finally.
generators.
W Pythonie 2.3 i w kolejnych wersjach cecha ta jest zawsze aktywna.
Używana w tym przypadku instrukcja __future__ ma postać:
from __future__ import generators
Zobacz też:
Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.