在generator中,我们不但可以通过for循环来迭代,还可以不断调用next()函数获取由yield语句返回的下一个值。
但是Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。
例子:
def consumer():
r = ''
while True:
n = yield r
if not n:
return
print('[CONSUMER] Consuming %s...' %n)
r = '200 OK'
def produce(c):
c.send(None) # 启动生成器
n = 0
while n < 5:
n = n + 1
print('[PRODUCER] Producing %s...' %n)
r = c.send(n) # 一旦n有值,则切换到consumer执行
print('[PRODUCER] Consumer return: %s'%r)
c.close() # 关闭生成器
c = consumer()
produce(c)
consumer()函数其实就是一个简单的生成器了,我们都知道生成器是需要next()来触发的,但是在这边我们不用next()了,我们用生成器的send()方法
next()跟send()不同的地方是,next()只能以None作为参数传递,而send()可以传递yield的值。
所以 n = yield r 可以理解为yield在发送n的同时也在接收r值,通过produce(c)调用后,一旦有n值,则切换到 consumer去执行。执行完了后生成器关闭。
本文深入探讨Python中的生成器和协程概念,通过实例展示如何使用yield语句进行值的发送和接收,以及如何利用send()方法控制生成器的执行流程。
4468

被折叠的 条评论
为什么被折叠?



