揭開yield關鍵字的神祕面紗

寫在前言python

常常會看見,python函數中帶有yield關鍵字,那麼yield是什麼,有什麼做用?函數

 

答案:能夠理解yield是一個生成器; spa

做用:遇到yield關鍵字,函數會直接返回yield值,至關於return;不一樣的是下次調用的時候會從yield以後的代碼開始執行。code

 

生成器是什麼?blog

是能夠迭代的,可是你 只能夠讀取它一次 ,由於它並不把全部的值放在內存中,它是實時地生成數據:內存

 

有人可能會說,我直接迭代,遍歷多好,爲何要用生成器,而後去遍歷生成器,這多麻煩。it

那麼你要了解,list列表,全部數據是存儲在內存中的。若是數據量很是大,會很是耗內存。for循環

 

 

yield是一個特殊的return?class

不一樣的是執行過程當中遇到yield關鍵字,會阻斷,yield 返回的是一個生成器。循環

第一次迭代中你的函數會執行,從開始到達 yield 關鍵字,而後返回 yield 後的值做爲第一次迭代的返回值.

而後,每次執行這個函數都會繼續執行你在函數內部定義的那個循環的下一次,再返回那個值,直到沒有能夠返回的。

 

注意,當函數中出現yield,該函數返回的就是一個生成器。不在是普通函數。

def func(num): n,a,b = 0,0,1 while num > n: yield b #阻斷,返回b a,b = b,a + b n+=1 for i in func(19): #func(19)是一個生成器,生成器只有調用時執行一次。因此這裏用循環 print i

 

除了for循環取值,你也能夠經過next()來取下一個值。

t = func(19)
t.next()
相關文章
相關標籤/搜索