Python进阶 协程

Python中的协程和生成器很相似但又稍有不同。主要区别在于:

  • 生成器是数据的生产者
  • 协程则是数据的消费者


def grep(pattern):
    print("Searching for", pattern)
    while True:
        line = (yield)
        print(type(line))
        if pattern in line:
            print(line)

# yield已经把变成了一个协程。它将不再包含任何初始值,相反要从外部传值给它。我们可以通过send()方法向它传值。


search = grep('coroutine')
next(search)
#output: Searching for coroutine
search.send("I love you")
search.send("Don't you love me?")
search.send("I love coroutine instead!")
#output: I love coroutine instead!

# 发送的值会被yield接收。我们为什么要运行next()方法呢?这样做正是为了启动一个协程。
# 就像协程中包含的生成器并不是立刻执行,而是通过next()方法来响应send()方法。
# 因此,你必须通过next()方法来执行yield表达式。


# 可以通过调用close()方法来关闭一个协程。
search = grep('coroutine')
search.close()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容