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