首頁  >  文章  >  後端開發  >  在 Python 3.3 中利用「yield from」語法的用例和好處是什麼?

在 Python 3.3 中利用「yield from」語法的用例和好處是什麼?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-24 03:44:02407瀏覽

What are the Use Cases and Benefits of Leveraging

在實踐中,利用Python 3.3 中的「yield from」語法

Python 3.3 中引入的「yielield from」語法提供了

Python 3.3 中引入的「yielield from」語法提供了生成器和協程的功能顯著增強。它在呼叫者和子生成器之間建立雙向連接,實現雙向無縫通訊。

「yield from」的用例

閱讀來自生成器的資料:

  • 此用例循環的功能,但增加了傳播異常的便利性。例如:
<code class="python">def reader():
    for i in range(4):
        yield '<< %s' % i

def reader_wrapper(g):
    yield from g

wrap = reader_wrapper(reader())
for i in wrap:
    print(i)

# Result:
# << 0
# << 1
# << 2
# << 3

將資料傳送到協程:

  • 此場景涉及建立一個協程,該協程接受傳送給它的資料並將其寫入到指定位置,例如檔案或套接字。例如:
<code class="python">def writer():
    while True:
        w = (yield)
        print('>> ', w)

def writer_wrapper(coro):
    yield from coro

w = writer()
wrap = writer_wrapper(w)
wrap.send(None)  # Prime the coroutine
for i in range(4):
    wrap.send(i)

# Expected result:
# >>  0
# >>  1
# >>  2
# >>  3</code>

與微線程的比較

語法的收益與微線程有一些相似之處,因為它允許暫停和恢復協程,創建傳統執行緒的輕量級替代方案。然而,與微線程相比,協程更輕量級且記憶體開銷更低。它們還在同一線程上運行,避免了多線程環境中與上下文切換相關的問題。

以上是在 Python 3.3 中利用「yield from」語法的用例和好處是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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