yield を調べてみました
yieldを使うメリットについて解説します。
例えば、return文でそのまま値を返す関数を作ったとします。一度に大きなリストが返ってくるような関数だと、たくさんのメモリを一度に消費してしまうことになります。
そのようなときは、yieldを使う事でその莫大な量の戻り値を小分けにして返すことが出来ます。これによって関数の実行をその都度中断し、少量ずつデータを返す事でメモリの消費量を抑えることが出来るようになります。
python の場合
リスト1
def myfunc():
yield 'one'
yield 'two'
yield 'three'
for x in myfunc():
print(x)
実行結果
one
two
three
yieldが呼ばれると、その時点でのジェネレーター内部の状態を保存したうえで生成した値を呼び出し元に返しつつ、制御も呼び出し元にいったん返します。
そして、再度ジェネレーターが呼ばれたとき、yieldの次の行から実行が再開されます。
forループは関数内で使用したyieldを全て処理するまで作動し続けます。