Python3 – ジェネレーターの実装

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

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

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

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

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

ジェネレーター式

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

 

コメントを残す

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