python高級部分-生成器

1.什么是生成器?

在python中,一邊計算一遍循環(huán)的機制被稱為生成器(generator),極大節(jié)省了內(nèi)存空間。

2.生成器的創(chuàng)建

2.1生成器創(chuàng)建方法1

首先,我們可以通過[x for x in range(10) ]創(chuàng)建一個列表。

image.png

想要創(chuàng)建一個生成器,只需把[]改為()即可。

image.png

在列表中,可以直接打印數(shù)據(jù),生成器保存的是算法,如果需要打印生成器中的數(shù)據(jù),可以通過next()方法逐個打印,沒有更多數(shù)據(jù)時,就會拋出StopIteration的錯誤。正常情況下,我們會用for循環(huán)代替next()方法,并且不用擔(dān)心出現(xiàn)StopIteration的錯誤。


2.2生成器創(chuàng)建方法2

在函數(shù)中使用yield關(guān)鍵字,函數(shù)就變成了生成器。以斐波那契數(shù)列為例:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...

def f(max):
      n,a,b=0,0,1
      while n<max:
              yield b
              a,b=b,a+b
              n=n+1
image.png

同樣的,把函數(shù)改成generator后,我們基本上從來不會用next()來調(diào)用它,而是直接使用for循環(huán):

image.png

generator是非常強大的工具,在Python中,可以簡單地把列表生成式改成generator,也可以通過函數(shù)實現(xiàn)復(fù)雜邏輯的generator。

要理解generator的工作原理,它是在for循環(huán)的過程中不斷計算出下一個元素,并在適當(dāng)?shù)臈l件結(jié)束for循環(huán)。對于函數(shù)改成的generator來說,遇到return語句或者執(zhí)行到函數(shù)體最后一行語句,就是結(jié)束generator的指令,for循環(huán)隨之結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容