python yield的返回值

2021-09-24 23:02:16 字數 1065 閱讀 7446

初識yield表示式是在生成器學習中,只要函式**現yield表示式,那麼這個函式就是生成器函式。當函式執行到yield那一行時,yield就會返回後面的值,然後凍結當前函式狀態,下行**不執行,等下一次呼叫再喚醒接著往下執行。

先來個簡單生成器函式:

def my_gen():

yield 1

yield 2

yield 3

用next方法獲取值:

ret = my_gen()

print(next(ret))

print(next(ret))

print(next(ret))

結果是1,2,3

如果把yield表示式賦值給乙個變數,列印那個變數,結果會是怎樣呢?再來乙個簡單生成器 試試看

def my_gen(start):

while start < 10:

temp = yield start

print(temp)

start += 1

先來呼叫下函式,把1傳給my_gen() 

ret = my_gen(1)

print(ret.__next__())

函式自上往下執行,進行while條件判斷,1 < 10,下一條yield表示式,遇yield 返回後面的值,就是1。再把yield start的結果賦給變數temp,遇yield還會凍結函式狀態,下行**print語句不執行。

我們在呼叫一次next方法

print(ret.__next__())

此時函式甦醒,從print語句開始執行,先列印temp值,然後start進行+1操作,再進行條件判斷,遇yield又丟擲start值,現在start = 2,所以列印2。接下來又又凍結函式狀態,停了下來。

本來我以為temp = 2,結果列印結果是none。頓時摸不著頭腦yield明明返回的值是後面的start,怎麼賦值給乙個變數就變成none呢? 後來查資料,解釋是第一次呼叫next方法後,yield先返回後面start的值出去,接下來已經沒有其他值,只能賦none值給temp。

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...

有返回值和無返回值函式

前面在定義函式時,有些函式使用了return語句,有些函式沒有使用return語句,使用return語句與不使用return語句有什麼區別呢?由前面的章節我們知道,若定義函式時沒有使用return語句,則預設返回乙個none。要返回乙個none,可以只寫乙個return,但要返回具體的數值,就需要在...

返回值優化

通過傳值方式返回要建立新物件時,應注意使用的形式,例如在operator return integer left.l right.l 咋看起來這像是乙個 對乙個建構函式的呼叫 其實並非如此。這是臨時物件語法,它是在說 建立乙個臨時integer物件並返回它 據此我們可能認為如果建立乙個有名字的區域性...