生成器中send 函數

def foo():
print('starting...')
while True:
res=yield 4
print('res:',res)

g=foo()
print(g.__next__())
print('*'*20)
print(g.send(7))

運行結果:
starting...
4
********************
res: 7
4
先大體說一下send函數的概念:此時你應該注意到上面那個的紫色的字,還有上面那個res的值爲何是None,這個變成了7,到底爲何,這是由於,send是發送一個參數給res的,由於上面講到,return的時候,並無把4賦值給res,下次執行的時候只好繼續執行賦值操做,只好賦值爲None了,而若是用send的話,開始執行的時候,先接着上一次(return 4以後)執行,先把7賦值給了res,而後執行next的做用,碰見下一回的yield,return出結果後結束。
 
 
 
5.程序執行g.send(7),程序會從yield關鍵字那一行繼續向下運行,send會把7這個值賦值給res變量
 
6.因爲send方法中包含next()方法,因此程序會繼續向下運行執行print方法,而後再次進入while循環
 
7.程序執行再次遇到yield關鍵字,yield會返回後面的值後,程序再次暫停,直到再次調用next方法或send方法。————————————————
相關文章
相關標籤/搜索