主要由于这个问题,我对yield返回值很熟悉
但是当收益在任务的右边时,收益又会如何呢?
@coroutine
def protocol(target=None):
while True:
c = (yield)
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
cr.next()
return cr
return start
在研究状态机和协程时,我在本博客的代码示例中遇到了这个问题。
yield
函数中使用的语句将该函数转换为“生成器”(创建迭代器的函数)。通常,通过调用来恢复生成的迭代器next()
。但是,可以通过调用方法send()
而不是next()
继续将值发送给函数:
cr.send(1)
在您的例子,这会赋值1
给c
各一次。
cr.next()
实际上等效于 cr.send(None)