首页  >  文章  >  后端开发  >  在 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 中引入的“yield from”语法提供了生成器和协程的功能显着增强。它在调用者和子生成器之间建立双向连接,实现双向无缝通信。

“yield from”的用例

阅读来自生成器的数据:

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