作为作业有什么收益? 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)
答
您可以使用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。
+1的一个很好的解释 – 2010-01-07 17:51:36
只是要注意,能够调用'发送()'在发电机之前,你必须调用'下一个()'真正开始它,或者你会得到一个TypeError说:'TypeError:不能发送非None值到一个刚刚起动的发电机' – Caumons 2015-05-26 14:06:51