Python 入門コース / 第7章 発展(第47〜50回) / レッスン 48
イテレータとジェネレータ
for 文の裏側で起きていること
for は、対象から __iter__() でイテレータを取り出し、__next__() を要素が尽きるまで呼び続けています。手で回すと動きがはっきり分かります。
editor.py
yield で作るジェネレータ
関数の中で return ではなく yield を使うと、値を 1 つ返して、その場で一時停止する関数になります。次に呼ばれたら続きから再開します。return は 1 回で終わり、yield は何度でも返せる——これが決定的な違いです。
editor.py
メモリを使わずに大量データを処理する
リストは全要素をメモリに載せますが、ジェネレータはそのつど 1 つだけ作ります。100 万行のログを処理しても、メモリはほとんど増えません。カッコを [] から () に変えるだけのジェネレータ式も便利です。
editor.py
✅ 理解度チェック
return と yield の違いは?