Python におけるジェネレーター Yield と Return の相互作用
Python 3.3 より前では、関数定義内で return と yield を組み合わせるとエラーが発生していました。ただし、Python 3.3 以降では、この動作が更新されました。
Python 3.3 の動作
Python 3.3 では、ジェネレーター関数内の return ステートメントが同様に扱われるようになりました。 StopIteration() ステートメントを発生させます。その結果、ジェネレーターで return と yield の両方を使用することは、指定された値で StopIteration 例外を発生させることと同じになります。
例:
次のコードを考えてみましょう。
<code class="python">def f(): return 3 yield 2</code>
f() 関数が呼び出されたときに、実行時エラーが発生しなくなります。代わりに、ジェネレーター オブジェクト (x) の __next__() 関数は、値 3 の StopIteration 例外を発生させます。
<code class="python">x = f() try: print(x.__next__()) except StopIteration as e: print(e.value) # Prints "3"</code>
返される値
Ifジェネレーター関数は、yield from 構文を使用して委任され、return ステートメントの戻り値は、委任されたジェネレーターの結果になります。
例:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate through the generator: for _ in g(): pass # Prints "1"</code>
この例では、f() ジェネレーターは、yield from を使用して g() ジェネレーターに委任されます。その結果、f() ジェネレーターの return 1 によって返される値が、g() ジェネレーターの結果になります。
以上がジェネレーターのイールドとリターンは Python でどのように相互作用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。