作为作业有什么收益? myVar的=(收益率)

问题描述:

我熟悉产量返回由于大多是this question作为作业有什么收益? myVar的=(收益率)

但是当它是在赋值的右边是什么做的屈服值?

@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 

我遇到了这一点,对this blog代码样本,而研究的状态机和协同程序。

函数中使用的yield语句将该函数转换为“生成器”(一个创建迭代器的函数)。产生的迭代器通常通过调用next()来恢复。但是,可以通过调用方法的send()代替next()恢复它值发送到功能:

cr.send(1) 

在您的例子,这将价值1分配给每个时间c

cr.next()实际上等同于cr.send(None)

+0

+1的一个很好的解释 – 2010-01-07 17:51:36

+1

只是要注意,能够调用'发送()'在发电机之前,你必须调用'下一个()'真正开始它,或者你会得到一个TypeError说:'TypeError:不能发送非None值到一个刚刚起动的发电机' – Caumons 2015-05-26 14:06:51

您可以使用send函数将值发送到生成器。

如果执行:

p = protocol() 
p.next() # advance to the yield statement, otherwise I can't call send 
p.send(5) 

然后yield将返回5,所以发电机c内将5

另外,如果你打电话p.next()yield将返回None

你可以找到更多的信息here