關於python中生成器之Send方法


#send主要是用於外部與生成器對象的交互
def
func1(): # 生成器函數 print("ok1") x = 10 # 函數內局部變量x賦值為10 print(x) x = yield 1 # 這里就是send函數的關鍵 # 之前我們創建的生成器,yield左邊都是沒有值(我現在不是很確定這里是不是應該叫做返回值,那就先用值代替)。 # 現在我們的x會接收到一個值,這個值是什么,從哪里來的?我們繼續看下去 print(x) yield x # 這里試第二個斷點 f1 = func1() # 獲取生成器對象 ret1 = next(f1) # 運行到第一個yield # ret1 = f1.send(None) #(這一句語句需要全部看完回頭再看)當第一次執行生成器的時候,他並沒有執行到yield這個位置,所以你一點傳值,就會出現問題 # 誰去接收?沒有對象接收就會報錯,所以第一次如果一定要用send去調用,那就傳一個None print(ret1) # 打印第一個yield返回的值 ######################################### # 關鍵點來了 # 我們現在有兩個問題,x = yield 1,這個x的值是什么,從哪里來 # 當下面這條語句運行后,他會將x的值賦值為send方法的參數,並且繼續執行到下一個yield ret2 = f1.send('eee') print(ret2) # ok1 # 10 # 1 # eee # eee # 問題都解決了,然后還有一個順序的問題,測試的結論提出來,可以自己打斷點嘗試一下 # f=func1() # next(f)或者f.send(None) => def func1(): # ...... # x = yield 1 到這里會返回,x的值不變 => f1.send('eee') # =>x = yield 1 這時候不要去管右邊,左邊的x被賦值('eee')然后繼續執行 # 其實只要把yield的左邊和右邊分開看就行了,他們的觸發條件不一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM