在生成器中回傳:Python 3.3 創新
在先前的Python 版本中,在同一函數定義中同時使用return 和ielield會導致在錯誤中。然而,Python 3.3 引入了重大變更。
請考慮以下程式碼:
<code class="python">def f(): return 3 yield 2</code>
在此程式碼中,return 語句出現在yield 語句之前。根據新的行為,「生成器中的 return
當在生成器物件上呼叫函數 next 時,它會引發一個值為 3 的 StopIteration 異常3,相當於回傳3。但是,由於生成器已終止,因此無法直接檢索該值。相反,該值可以作為異常物件的 value 屬性來存取。
<code class="python">x = f() try: x.__next__() except StopIteration as e: print(e.value) # Outputs 3</code>
此外,如果產生器與yield from 語法一起使用,則它充當傳回值。
<code class="python">def g(): x = yield from f() print(x) for _ in g(): pass</code>
在本例中,輸出為 1(f 的回傳值),但由於產生器已終止,因此不會列印 2。
以上是Python 3.3 中回傳內部產生器可以取代引發 StopIteration 異常嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!