Python3 – ジェネレータ

関数とyield文によるジェネレータ

イテレータ__next__メソッドでコレクションの要素を取り出すのに有用なのに対して、ジェネレータはyield文で任意の結果を順次返していく。関数内にyield文を書くと、その関数はジェネレータになる。

ジェネレータは以下のように構成する。

  • ジェネレータは関数として定義され、その関数への参照として取得する
  • forブロックのループのたびにジェネレータの中のyieldが順次1つずつ呼び出される
  • 呼び出せるyield文がなくなるか、forブロックで強制的に抜け出したときループが終了

先の例ではjoin文が4回だけ呼び出されるので、それが呼べなくなったときにループが終了する。これに対して次の例では、ジェネレータは無限に結果を生成し続け、forブロックで条件に合致したときにループを終了させている。

ジェネレータ式

内包表現と同じ表現を()内に書くと、要素を一つずつ生成するジェネレータオブジェクトを返す。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です