2010-01-07 111 views

回答

35

函数中使用的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

11

您可以使用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