ホームページ  >  記事  >  バックエンド開発  >  Python ジェネレーターでは Return と Yield はどのように機能しますか?

Python ジェネレーターでは Return と Yield はどのように機能しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 03:16:02410ブラウズ

How Do Return and Yield Work in Python Generators?

Python ジェネレーターの Return と Yield

バージョン 3.3 より前の Python では、ジェネレーター関数定義内で return ステートメントと yield ステートメントの両方を同時に使用すると、エラーが発生します。ただし、この動作は Python 3.3 で変更されました。

次のコードを考えてみましょう:

<code class="python">def f():
  return 3
  yield 2</code>

x = f() を呼び出すとジェネレーターが作成され、x.__next__() はStopIteration 例外。この動作は、値 3 を返す単純な return 3 とは異なります。

これは、Python 3.3 では return が返されるためです。ジェネレーター内では、StopIteration() を発生させるのと同等になります。その結果、上記のコード スニペットでは、StopIteration 例外に値 3 が含まれます。例外の value 属性にアクセスすると、この値が取得されます。

さらに、yield from を使用すると、ジェネレータから他のジェネレータへの転送が可能になります。次の例を考えてみましょう。

<code class="python">def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

for _ in g():
    pass</code>

このコードは 1 を出力します。 g は実行を f に委任し、f によって返された値 (つまり 1) が x に割り当てられます。ただし、f の yield 2 ステートメントは、実行が g に委任されているため実行されません。

以上がPython ジェネレーターでは Return と Yield はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。