亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

一分鐘了解Python生成器

什么是生成器

當(dāng)我們討論生成器的時(shí)間一般會(huì)涉及兩個(gè)方面

生成器函數(shù) :生成器函數(shù)類(lèi)似正常的函數(shù),但是當(dāng)它需要返回值的時(shí)候使用 yield 來(lái)代替 return。如果一個(gè)函數(shù)包含 yield,那么就可以說(shuō)這個(gè)函數(shù)是生成器函數(shù)。

def gen_fun():

??yield 'a'

??yield 'b'

for item in gen_fun():

??print(item)

執(zhí)行以上代碼,輸出:

a

b

生成器對(duì)象 :生成器函數(shù)返回的就是生成器對(duì)象,通過(guò)調(diào)用生成器對(duì)象的 next() 方法(Python3 為 __next__() 或內(nèi)置的 next 函數(shù))或 for in 語(yǔ)法來(lái)使用生成器對(duì)象。

def gen_func():

??yield 'a'

??yield 'b'

# 這里的 g 就是一個(gè)生成器對(duì)象

g = gen_func()

# 通過(guò) for in 來(lái)去除生成的數(shù)據(jù)

for item in g:

??print(item)

執(zhí)行以上代碼,輸出:

a

b

生成器有什么特點(diǎn)

同樣是可以用 for in 來(lái)遍歷對(duì)比直接返回 ['a', 'b'] 的正常函數(shù),它具有以下特殊之處:

它并沒(méi)有把所有生成的值存在內(nèi)存中,而是在運(yùn)行時(shí)生成值。

它返回的生成器對(duì)象僅可遍歷一次,例如上述例子中再次使用 for item in g 遍歷時(shí)會(huì)發(fā)現(xiàn)什么沒(méi)輸出。

生成器的應(yīng)用場(chǎng)景

生成器運(yùn)行時(shí)生成值時(shí)的特性可以避免一次性創(chuàng)建大量的對(duì)象占有過(guò)多的內(nèi)存,它能夠讓你在許多情況下以一種優(yōu)雅而又更低內(nèi)存消耗的方式簡(jiǎn)化 無(wú)限 序列相關(guān)的操作。實(shí)際場(chǎng)景中當(dāng)需要大量生成數(shù)據(jù)的時(shí)候都是考慮讓生成器登場(chǎng)的時(shí)候。

以下是一個(gè)經(jīng)典的實(shí)現(xiàn)斐波那契數(shù)列生成器的例子:

def fib(n):

??a, b = 0, 1

??for item in range(n):

????yield b

????a, b = b, a + b

for item in fib(5):

??print(item)

執(zhí)行以上代碼,輸出:

1

1

2

3

5

 

聲明:文章來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!