Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ジェネレーター関数 | 関数の戻り値仕様
Python関数チュートリアル
セクション 4.  4
single

single

ジェネレーター関数

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

Note
定義

ジェネレーター関数は、yieldの代わりにreturnキーワードを使用して値のシーケンスを生成する特別な種類の関数。ジェネレーター関数が呼び出されると、イテレーターオブジェクトを返し、このオブジェクトを反復処理することで値を一度に一つずつ取得可能。

Note
定義

イテレーターオブジェクトは、__iter__()および__next__()メソッドを定義することでイテレーター・プロトコルを実装するオブジェクト。これにより、next()で要素を一つずつ取得でき、シーケンスやジェネレーター関数内の項目をループ処理することが可能。

ジェネレーター関数の主な利点は、メモリ効率の高さ。シーケンス全体を事前に生成してメモリに保存するのではなく、必要に応じてオンデマンドで値を生成。

yield の仕組み

関数を完全に終了させる return とは異なり、yield は関数の実行を一時停止し、その状態を保存します。次に next() が呼び出されると、ジェネレーターは中断した場所から正確に再開されます:

12345678910
def 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() を呼び出し、ジェネレーターが尽きるまで繰り返します:

1234567
def 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
Note
注意

ジェネレーターが使い尽くされる(yieldする値がなくなる)と、next()を呼び出すとStopIteration例外が発生します。forループはこれを自動的に処理します。

タスク

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

even_numbers ジェネレーター関数を実装し、指定された範囲内の偶数を生成します。

  1. 2つのパラメータ even_numbersstart を受け取るジェネレーター関数 stop を定義します。
  2. whilestart 以下である間、stop ループを使用して繰り返します。
  3. yield が偶数(2で割り切れる)である場合に start で返します。
  4. 各イテレーションの後に start を1増やします。
  5. 生成されたすべての値を出力するために for ループを使用します。

解答

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

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

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

セクション 4.  4
single

single

AIに質問する

expand

AIに質問する

ChatGPT

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

some-alt