python中yield的用法 淺顯易懂

2021-09-10 06:07:43 字數 1477 閱讀 4444

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...