def consumer(name):輸出結果:print("%s 準備吃包子啦!" %name)
while true:
baozi = yield "return返回的值..."
print("包子[%s]來了,被[%s]吃了!" %(baozi,name))
c = consumer("小華")
print('-------華麗分割線1-------------')
print(c.__next__())
print('-------華麗分割線2-------------')
print(c.__next__())
print('-------華麗分割線3-------------')
c.send("韭菜包")
-------華麗分割線1-------------下面我們來分析程式的執行過程:小華 準備吃包子啦!
return返回的值...
-------華麗分割線2-------------
包子[none]來了,被[小華]吃了!
return返回的值...
-------華麗分割線3-------------
包子[韭菜包]來了,被[小華]吃了!
1.程式開始執行以後,因為consumer函式中有yield關鍵字,所以consumer函式並不會真的執行,而是先得到乙個生成器generator(相當於乙個物件),
2.直到呼叫__next__()方法,consumer函式正式開始執行,先執行consumer函式中的print方法,然後進入while迴圈,
3.程式遇到yield關鍵字,然後把yield想想成return,return了乙個值之後,程式停止,並沒有執行賦值給baozi操作,此時__next__()語句執行完成,所以輸出的前兩行(第乙個是while上面的print的結果,第二個是return出的結果)是執行print(c.__next__())的結果,
4.又開始執行下面的print(c.__next__()),這個時候和上面那個差不多,不過不同的是,這個時候是從剛才那個上次程式停止的地方開始執行的,也就是要執行baozi的賦值操作,這時候要注意,這個時候賦值操作的右邊是沒有值的(因為剛才那個是return出去了,並沒有給賦值操作的左邊傳引數),所以這個時候baozi賦值是none,所以接著下面的輸出就是none,
5.程式會繼續在while裡執行,又一次碰到yield,這個時候同樣return,
6.程式執行g.send("韭菜包"),程式會從yield關鍵字那一行繼續向下執行,send會把"韭菜包"這個值賦值給baozi變數,執行print("包子[%s]來了,被[%s]吃了!" %(baozi,name))。
Python中的yield用法
在python中,我們將帶有 yield 的函式稱之為 generator 生成器 generator可以一邊迴圈一邊計算,是可迭代物件,也就是說可以使用for迴圈來迭代出generator的各個值。一般為了說明generator,都會使用斐波那契數列來舉例,這裡也不例外 如結果所示,呼叫 fab ...
Python中的yield用法
yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行。也就是說,yield返回函式,交給呼叫者乙個返回值,然後再 瞬移 回去,讓函式繼續執行,直到嚇一條yield語句再...
python中 yield的用法
接下來是正題 首先,如果你還沒有對yield有個初步分認識,那麼你先把yield看做 return 這個是直觀的,它首先是個return,普通的return是什麼意思,就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做乙個是生成器 generator 的一部分 帶y...