久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > python生成器表達(dá)式

python生成器表達(dá)式

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-11-07 20:27:59 1699360079

生成器表達(dá)式來源于迭代和列表解析的組合,生成器和列表解析類似,但是它使用尖括號而不是方括號

>>>#列表解析生成列表

>>>[x**3forxinrange(5)]

[0,1,8,27,64]

>>>

>>>#生成器表達(dá)式

>>>(x**3forxinrange(5))

at0x000000000315F678>

>>>#兩者之間轉(zhuǎn)換

>>>list(x**3forxinrange(5))

[0,1,8,27,64]

一個迭代既可以被寫成生成器函數(shù),也可以被協(xié)程生成器表達(dá)式,均支持自動和手動迭代。而且這些生成器只支持一個active迭代,也就是說生成器的迭代器就是生成器本身。

迭代器(迭代就是循環(huán))

迭代器包含有next方法的實(shí)現(xiàn),在正確的范圍內(nèi)返回期待的數(shù)據(jù)以及超出范圍后能夠拋出StopIteration的錯誤停止迭代。

我們已經(jīng)知道,可以直接作用于for循環(huán)的數(shù)據(jù)類型有以下幾種:

一類是集合數(shù)據(jù)類型,如list,tuple,dict,set,str等

一類是generator,包括生成器和帶yield的generatorfunction

這些可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable

可以使用isinstance()判斷一個對象是否為可Iterable對象

>>>fromcollectionsimportIterable

>>>isinstance([],Iterable)

True

>>>isinstance({},Iterable)

True

>>>isinstance('abc',Iterable)

True

>>>isinstance((xforxinrange(10)),Iterable)

True

>>>isinstance(100,Iterable)

False

而生成器不但可以作用于for循環(huán),還可以被next()函數(shù)不斷調(diào)用并返回下一個值,直到最后拋出StopIteration錯誤表示無法繼續(xù)返回下一個值了。

所以這里講一下迭代器

一個實(shí)現(xiàn)了iter方法的對象是可迭代的,一個實(shí)現(xiàn)next方法并且是可迭代的對象是迭代器。

可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:Iterator。

所以一個實(shí)現(xiàn)了iter方法和next方法的對象就是迭代器。

可以使用isinstance()判斷一個對象是否是Iterator對象:

>>>fromcollectionsimportIterator

>>>isinstance((xforxinrange(10)),Iterator)

True

>>>isinstance([],Iterator)

False

>>>isinstance({},Iterator)

False

>>>isinstance('abc',Iterator)

False

生成器都是Iterator對象,但list、dict、str雖然是Iterable(可迭代對象),卻不是Iterator(迭代器)。

把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù):

>>>isinstance(iter([]),Iterator)

True

>>>isinstance(iter('abc'),Iterator)

True

你可能會問,為什么list、dict、str等數(shù)據(jù)類型不是Iterator?

這是因?yàn)镻ython的Iterator對象表示的是一個數(shù)據(jù)流,Iterator對象可以被next()函數(shù)調(diào)用并不斷返回下一個數(shù)據(jù),直到?jīng)]有數(shù)據(jù)時拋出StopIteration錯誤??梢园堰@個數(shù)據(jù)流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數(shù)實(shí)現(xiàn)按需計算下一個數(shù)據(jù),所以Iterator的計算是惰性的,只有在需要返回下一個數(shù)據(jù)時它才會計算。

Iterator甚至可以表示一個無限大的數(shù)據(jù)流,例如全體自然數(shù)。而使用list是永遠(yuǎn)不可能存儲全體自然數(shù)的。

以上內(nèi)容為大家介紹了python生成器表達(dá)式,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT