”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在 Python 3.3 中利用“yield from”语法的用例和好处是什么?

在 Python 3.3 中利用“yield from”语法的用例和好处是什么?

发布于2024-11-06
浏览:695

What are the Use Cases and Benefits of Leveraging \

在实践中,利用 Python 3.3 中的“yield from”语法

Python 3.3 中引入的“yield from”语法提供了生成器和协程的功能显着增强。它在调用者和子生成器之间建立双向连接,实现双向无缝通信。

“yield from”用例

阅读来自生成器的数据:

  • 此用例模仿 for 循环的功能,但增加了传播异常的便利性。例如:
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

向协程发送数据:

  • 此场景涉及创建一个协程,该协程接受发送给它的数据并将其写入指定位置,例如文件或插座。例如:
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

与微线程的比较

yield from 语法与微线程有一些相似之处,因为它允许挂起和恢复协程,从而创建了一个轻量级的替代方案传统线程。然而,与微线程相比,协程更轻量级并且内存开销更低。它们还在同一线程上运行,避免了与多线程环境中的上下文切换相关的问题。

版本声明 本文转载于:1729681907如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3