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 の違いは?