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()
网友评论