セクション 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つを試してチャットを始めてください