ジェネレーター内でのリターン: Python 3.3 の革新
以前の Python バージョンでは、同じ関数定義内で return と yield の両方を使用すると、次の結果が得られます。エラー中。ただし、Python 3.3 では重要な変更が導入されました。
次のコードを考えてみましょう。
<code class="python">def f(): return 3 yield 2</code>
このコードでは、return ステートメントが yield ステートメントの前に表示されます。新しい動作によれば、「ジェネレーターでの return
関数 next がジェネレーター オブジェクトで呼び出されると、値 3 の StopIteration 例外をスローします。 3。これは 3 を返すのと同じです。ただし、ジェネレータが終了しているため、この値を直接取得することはできません。代わりに、値には例外オブジェクトの value 属性としてアクセスできます。
<code class="python">x = f() try: x.__next__() except StopIteration as e: print(e.value) # Outputs 3</code>
さらに、ジェネレーターが yield from 構文で使用されている場合、戻り値として機能します。
<code class="python">def g(): x = yield from f() print(x) for _ in g(): pass</code>
この場合、出力は 1 (f の戻り値) ですが、ジェネレーターが終了しているため 2 は出力されません。
以上がPython 3.3 Substitute で内部ジェネレーターを返すと StopIteration 例外が発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。