Python 3.3 中回傳內部產生器可以取代引發 StopIteration 異常嗎?

Patricia Arquette
發布: 2024-10-24 16:56:02
原創
451 人瀏覽過

Can Returning Inside Generators in Python 3.3 Substitute Raise StopIteration Exceptions?

在生成器中回傳:Python 3.3 創新

在先前的Python 版本中,在同一函數定義中同時使用return 和ielield會導致在錯誤中。然而,Python 3.3 引入了重大變更。

請考慮以下程式碼:

<code class="python">def f():
    return 3
    yield 2</code>
登入後複製

在此程式碼中,return 語句出現在yield 語句之前。根據新的行為,「生成器中的 return 現在相當於 raise StopIteration()」。因此,上面程式碼中的 return 語句本質上會引發一個值為 3 的 StopIteration 異常。

當在生成器物件上呼叫函數 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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!