3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

yield って何?!

Posted at

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を全て処理するまで作動し続けます。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?