首頁  >  文章  >  後端開發  >  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 語句現在以類似方式處理到 raise StopIteration() 語句。因此,在生成器中同時使用 return 和 yield 現在相當於引發具有指定值的 StopIteration 異常。

範例:

考慮以下程式碼:

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

當呼叫 f() 函數時,它將不再引發執行階段錯誤。相反,生成器物件(x) 的__next__() 函數會引發StopIteration 異常,其值為3:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn