Pythonのジェネレータの詳細な説明や使い道については以下の記事が参考になります。
ジェネレータの詳細や使い道はともかく、動きだけを見ると以下のようになります。
- ループで呼び出すとジェネレータ関数内の文を順次実行し、yieldした値が取り出され、そこで処理が中断される。
- 次に呼び出された時は、yieldの次の文から処理が再開される。
- ジェネレータ関数内の処理が全て終了するとループも終了する。
次のようなプログラムを実行してみると理解しやすいと思います。
def generator():
print('a')
yield 1
print('b')
yield 2
print('c')
yield 3
print('END')
for y in generator():
print(y)
print('#')
出力
a
1
#
b
2
#
c
3
#
END