Python 生成器中的Return 和Yield
在3.3 版本之前的Python 中,在生成器函數定義中同時使用return 和函數定義中同時使用return ield 語句會導致導致錯誤。然而,這種行為在 Python 3.3 中發生了變化。
考慮以下程式碼:
<code class="python">def f(): return 3 yield 2</code>
呼叫 x = f() 將建立一個生成器,並且 x.__next__() 將引發一個停止迭代異常。此行為與簡單的 return 3 不同,後者會傳回值 3。
這是因為在 Python 3.3 中,return ;現在,生成器內相當於 raise 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中文網其他相關文章!