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

Barbara Streisand
リリース: 2024-10-25 06:05:29
オリジナル
914 人が閲覧しました

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!