ホームページ  >  記事  >  バックエンド開発  >  ジェネレーターのイールドとリターンは Python でどのように相互作用しますか?

ジェネレーターのイールドとリターンは Python でどのように相互作用しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-25 06:05:29904ブラウズ

How Do Generator Yield and Return Interact in Python?

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 サイトの他の関連記事を参照してください。

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