セクション 4. 章 5
single
無限ジェネレーター
メニューを表示するにはスワイプしてください
yield はジェネレーターを一時停止し、次の next() 呼び出しで再開することを思い出してください。これまでに見てきたジェネレーターには明確な終了点がありました。しかし、ジェネレーターは 無限ループ と組み合わせることで特に強力になります。値を無限に生成し、メモリに保存することなく処理できます。
while True を使った無限ジェネレーター
ジェネレーター内で while True ループを使用すると、無限シーケンス を作成できます。これはリストとして保存することが不可能なものです。ジェネレーターは next() が呼び出されたときだけ次の値を生成します。
1234567891011def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
next() を何回呼び出しても、ジェネレーターは常に新しい値を用意します。先読みや値のメモリ保存は行いません。
無限ジェネレーターの制御
ジェネレーターは永遠に動作するため、取得する値の数を制御する必要があります。最も一般的な方法は、for を使った range() ループです。
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
注意
停止条件なしで無限ジェネレーターを通常の for ループで反復処理しないこと。プログラムが永久に実行され、クラッシュする原因となる。
タスク
スワイプしてコーディングを開始
無限ジェネレーター関数を使用して、一意のユーザーIDを生成します。id_generator() 関数は 'ID_1'、'ID_2' などの識別子を継続的に生成します。
- 識別子が1から始まるため、変数
countを値 1で初期化します。 - 無限の
whileループを使用して、識別子を継続的に生成します。 yieldを使い、f'ID_{count}'の形式で現在の識別子を返します。- 各イテレーションの後に
countを1ずつ増加させます。 id_genを呼び出して、ジェネレーターオブジェクトid_generator()を初期化します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 4. 章 5
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください