セクション 4. 章 4
single
ジェネレーター関数
メニューを表示するにはスワイプしてください
定義
ジェネレーター関数は、yield の代わりに return キーワードを使用して値のシーケンスを生成する特別な種類の関数。ジェネレーター関数を呼び出すと、イテレーターオブジェクトが返され、1つずつ値を取り出しながら反復処理が可能。
ジェネレーター関数の主な利点は、メモリ効率の高さ。シーケンス全体を事前に生成してメモリに保存するのではなく、必要に応じて値をその場で生成する。
yield の動作
return とは異なり、yield は関数の実行を一時停止し、その状態を保存する。次に next() が呼び出されると、ジェネレーターは中断した場所から正確に再開される。
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
for ループを使ってジェネレーターを反復処理することも可能。for ループは自動的に next() を呼び出し、ジェネレーターが尽きるまで繰り返す。
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
注意
ジェネレーターが使い尽くされる(これ以上 yield する値がない)と、next() を呼び出すと StopIteration エラーが発生します。for ループはこれを自動的に処理します。
タスク
スワイプしてコーディングを開始
指定した範囲内の偶数を生成するeven_numbersジェネレーター関数を実装します。
- パラメータ
even_numbersとstartを受け取るstop関数を定義します。 whileループを使用し、startがstop以下である間繰り返します。yieldが偶数の場合、startを使ってstartを返します。- 各イテレーション後にstartを1ずつ増やします。
forループで生成された値をすべて出力します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 4. 章 4
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください