セクション 6. 章 4
single
ジェネレーターの導入:効率的なイテレーションのための値の生成
メニューを表示するにはスワイプしてください
ジェネレーターは、イテレーターを簡潔かつ可読性の高い方法で作成できるため、遅延評価を容易にする手段。イテレーターは __iter__() および __next__() メソッドを持つクラスとして実装されるのに対し、ジェネレーターは yield キーワードを使用する関数として実装され、値を一度に1つずつ生成。ジェネレーターは呼び出し間で状態を自動的に保持するため、多くの用途で直感的かつ効率的。
ジェネレーターは次の特徴を持つ特殊な関数:
yieldキーワードをreturnの代わりに使用- yield が呼ばれると実行を一時停止し、状態を保持
- 再度呼び出されると、停止した位置から実行を再開
123456789def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
12345678910import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
イテレーターとジェネレーターの違い
タスク
スワイプしてコーディングを開始
前回の課題では、カスタムイテレータクラスを使って無限サイコロロールを実装しました。今回はジェネレーター関数を使って同じ機能を簡潔に実現します。ジェネレーター関数を用いると、値を遅延生成できます。
- ジェネレーター関数
yieldを定義し、dice_rollerを使って1から6のランダムなサイコロの出目を生成します。シミュレーションにはrandom.randint()を使用します。 dice_roller()を呼び出してジェネレーターオブジェクトを作成し、dice_generatorに代入します。forループとenumerate()を使ってジェネレーターを反復処理します。10条件とif文を使ってbreak回で反復を終了します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 6. 章 4
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください