← トップ
8 / 10

8. yield(1つずつ値を出す)

CONCEPT

yieldイールド — 値を返して一時停止 は関数の中で値を1つずつ出す命令です。return が「全部まとめて返す」なのに対し、yieldイールド — 値を返して一時停止 は「1つ出して、また続きから始める」ことができます。

📍 使い道: 大量データをメモリ節約しながら1件ずつ処理
COMMON MISTAKES — よくある間違い
return の代わりに yield を忘れるジェネレータ関数には return ではなく yield が必要です。yield で値を返しつつ中断できます。
ジェネレータを2回使い回すジェネレータは1回しか消費できません。再度使うには list(gen) でリストにするか、新しく作り直します。
コードを1行ずつ実行してみよう
example.pyPython
1def count_up():# count_up はジェネレータ関数
2 yield 1# yield 1 → 1を出力して一時停止
3 yield 2# yield 2 → 2を出力して一時停止
4 yield 3# yield 3 → 3を出力して一時停止
5for num in count_up():# forループで 1, 2, 3 を順に取り出す
« 次の行 » ボタンを押して実行を開始
VARIABLES
実行すると変数の状態が表示されます
ジェネレータは「1つずつ値を作って返す」関数です。 yield で値を返し、次に呼ばれたら続きから再開します。 大量のデータを一度にメモリに載せないための仕組みです。
📚 読み方ガイド
コード読み方
yield 値値を1つ出して関数を一時停止(yieldイールド — 値を返して一時停止
next(gen)ジェネレータジェネレータ — 値を1つずつ生成から次の値を取り出す
for x in gen():forループでも値を取り出せる
return vs yieldreturn は関数終了、yield は一時停止
KEY POINT

yieldイールド — 値を返して一時停止 を使う関数はジェネレータジェネレータ — 値を1つずつ生成になる。yield 値 で値を1つ出して関数は一時停止し、next() で続きから再開する。大きなデータを扱うときにメモリを節約できる。

確認問題
1次のコードの出力は?
def gen(): yield "A" yield "B" g = gen() print(next(g)) print(next(g))
1回目の print で "A"、2回目で "B" が表示されます。yieldイールド — 値を返して一時停止 で一時停止した場所から再開します。
2yield と return の違いは?
def with_return(): return 1 # 関数が終了 def with_yield(): yield 1 # 一時停止
return は関数を完全に終了させます。yieldイールド — 値を返して一時停止 は値を出したあと関数を一時停止し、次に呼ばれたときに続きから再開します。
3ジェネレータはどんなときに便利?
# 大きなファイルを1行ずつ読む例 def read_lines(filename): with open(filename) as f: for line in f: yield line.strip()
大きなデータを扱うときにメモリを節約できます。全データを一度にメモリに読み込むのではなく、1つずつ処理できるため、巨大なファイルでも安心です。
CHEAT SHEET — まとめ
3行で分かる
  • 値を1つずつ出しては止まる関数(ジェネレータ)
  • return が「全部返す」なら yield は「1つ出して中断」
  • 大量データをメモリ節約しながら処理できる
ジェネレータ