2010-01-07 132 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