python yield用法詳解(未完成)

2022-07-12 08:12:09 字數 1162 閱讀 8090

可以把yield看成是return,這個是直觀的,首先是個return,普通的return就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做是乙個生成器的一部分

def

foo():

print('

starting...')

while

true:

res = yield 4

print('

res:

',res)

g =foo()

print

(next(g))

print("

*"*20)

print(next(g))

列印出來的結果

starting...

4********************res:4

上面是我的推理,實際上列印的是下面這樣的

starting...

4********************res:none

4

解釋一下**的執行順序

1、程式開始執行後,因為foo函式中有yield關鍵字,所以foo函式並不會真的執行,而是先得到乙個生成器g(相當於乙個物件)

2、直到呼叫next方法,foo函式正式開始執行,先執行foo函式中的print方法,然後進入while迴圈

3、程式遇到yield關鍵字,然後把yield想成return,return了乙個4之後,程式停止,並沒有執行賦值給res操作,此時next(g)語句執行完成,所以輸出的前兩行(第乙個是while上面的print的結果,第二個是return出的結果)是執行print(next(g))的結果

4、程式執行print("*"*20),輸出20個*

5、又開始執行下面的print(next(g)),這個時候和上面那個差不多,不同的是,這個時候是從剛才那個next程式停止的地方開始執行的,也就是要執行res的賦值操作,這時候要注意,這個時候賦值操作的右邊是沒有值的(因為剛才那個是return出去了,並沒有給賦值操作的左邊傳引數),所以這個時候res賦值是none,所以接著下面的輸出就是res:none

6、程式會繼續在while裡執行,又一次碰到yield,這個時候同樣return 出4,然後程式停止,print函式輸出的4就是這次return出的4

參考

python yield用法,簡單

學習python的過程過程彙總,經常會遇到yield,但是經常是懵逼的狀態,到底是怎麼用的,自己寫了乙個函式後就明白了,其實很簡單,看下面就懂了。函式中yield用法def yield tst n while n 20 yield 返回 遇到yield就返回yield後面的值,相當於return 返...

python yield 生成器用法

總結 可以把send 看成是next 的公升級版。send 不僅能像next 一樣觸發生成器的乙個迭代,還能傳入乙個值給yield語句。看下面乙個列子 def func y 1 while true x yield y y 1 print 接收了x format x f func f是乙個初始化好的...

python yield 學習筆記

學習yield之前,了解了迭代器,生成器的概念。沒有太多的細化。迭代器物件 支援iter和next 方法,其中iter 方法返回迭代物件本身 next 方法返回容器的下乙個元素,在結尾時印發stopiteration異常。生成器是迭代器,但是只能遍歷一次。yield返回的就是生成器。看例項,銀行生成...