Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ジェネレーターの導入:効率的なイテレーションのための値の生成 | Pythonにおけるイテレータとジェネレータの習得
Python構造化プログラミング
セクション 6.  4
single

single

bookジェネレーターの導入:効率的なイテレーションのための値の生成

メニューを表示するにはスワイプしてください

ジェネレーターは、イテレーターを簡潔かつ可読性の高い方法で作成できるため、遅延評価を容易にする手段。イテレーターは __iter__() および __next__() メソッドを持つクラスとして実装されるのに対し、ジェネレーターは yield キーワードを使用する関数として実装され、値を一度に1つずつ生成。ジェネレーターは呼び出し間で状態を自動的に保持するため、多くの用途で直感的かつ効率的。

ジェネレーターは次の特徴を持つ特殊な関数:

  1. yield キーワードを return の代わりに使用
  2. yield が呼ばれると実行を一時停止し、状態を保持
  3. 再度呼び出されると、停止した位置から実行を再開
123456789
def 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
copy
12345678910
import 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}")
copy

イテレーターとジェネレーターの違い

タスク

スワイプしてコーディングを開始

前回の課題では、カスタムイテレータクラスを使って無限サイコロロールを実装しました。今回はジェネレーター関数を使って同じ機能を簡潔に実現します。ジェネレーター関数を用いると、値を遅延生成できます。

  1. ジェネレーター関数yieldを定義し、dice_rollerを使って1から6のランダムなサイコロの出目を生成します。シミュレーションにはrandom.randint()を使用します。
  2. dice_roller()を呼び出してジェネレーターオブジェクトを作成し、dice_generatorに代入します。
  3. forループとenumerate()を使ってジェネレーターを反復処理します。10条件とif文を使ってbreak回で反復を終了します。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 6.  4
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt