在实践中,利用 Python 3.3 中的“yield from”语法
Python 3.3 中引入的“yield 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中文网其他相关文章!