小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

最詳細(xì)的python生成器分類與詳解

 xiaoyimin 2019-06-22

python強(qiáng)大的引進(jìn)-生成器。這就是我們今天要學(xué)習(xí)的這一章內(nèi)容。

定義:

在Python中,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器(Generator)。換句更簡單的話來理解:任何包含yield語句的函數(shù)稱為為生成器。

好處:

通過列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含100萬個(gè)元素的列表,不僅占用很大的存儲(chǔ)空間,如果我們僅僅需要訪問前面幾個(gè)元素,那后面絕大多數(shù)元素占用的空間都白白浪費(fèi)了。

所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環(huán)的過程中不斷推算出后續(xù)的元素呢?這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間。

工作原理:

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

如何創(chuàng)建:

1. 只要把一個(gè)列表生成式的【】換成()就可以。

2. 上圖的例子是用yield來說明一下怎么創(chuàng)建生成器。

打開百度App,看更多圖片

其實(shí)與創(chuàng)建函數(shù)類似: 區(qū)別是,創(chuàng)建函數(shù)是return返回值。創(chuàng)建生長期是yield產(chǎn)生多個(gè)值,每次產(chǎn)生一個(gè),函數(shù)就會(huì)凍結(jié),等在那里等待被再次激活。等激活后從停止的那點(diǎn)開始執(zhí)行。

生成器種類:

A. 循環(huán)生成器。與列表推導(dǎo)式類似。只不過一個(gè)是返回列表一個(gè)是返回生成器(不會(huì)立刻循環(huán))。請看下面例子來說明區(qū)別。

>>> L = [x * x for x in range(10)]

>>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g

at 0x104feab40>

>>> for n in g:

print n

B. 遞歸生成器。

C. 通用生成器:

生成器的組成 1. 生成器函數(shù): def定義,包含yield部分。

2. 生成器迭代器:這個(gè)函數(shù)的返回部分。

生成器方法

send

類似于next,在比不過需要一個(gè)發(fā)送的參數(shù)。

def repeater(value):

while True:

new=(yield value)

if new is not None:value=new

>>> r=repeater(42)

>>> r.next()

42

>>> r.send('hello world')

'hello world'

throw方法:

使用異常類型調(diào)用,還有可選的值以及回溯對象,用于生成器內(nèi)引發(fā)一個(gè)異常。(在yield表達(dá)式中)

close方法:

調(diào)用時(shí)不要參數(shù),用于停止生成器。

模擬生成器

當(dāng)舊版本不能使用時(shí)生成器時(shí),需要普通函數(shù)模擬生成器。

方式:1. result=[]防御函數(shù)體開始處。

2. yield some_expression 用result.append(some_expression)代替。

3.函數(shù)末尾添加return result

注:前面的遞歸生成器flatten就可以用普通函數(shù)重寫模擬生成器。

案例總結(jié)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多