在實踐中,利用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中文網其他相關文章!