久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

本篇文章給大家?guī)?lái)了關(guān)于python的相關(guān)知識(shí),其中主要介紹了關(guān)于容器、可迭代對(duì)象、迭代器以及生成器的相關(guān)問題,下面就一起來(lái)看一下,希望對(duì)大家有幫助。

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

推薦學(xué)習(xí):python視頻教程

在剛開始學(xué)Python的時(shí)候,是不是經(jīng)常會(huì)聽到大佬們?cè)谥v容器、可迭代對(duì)象、迭代器、生成器、列表/集合/字典推導(dǎo)式等等眾多概念,其實(shí)這不是大佬們沒事就擱那扯專業(yè)術(shù)語(yǔ)來(lái)裝B,而是這些東西都得要明白的,光知道字符串、列表等基礎(chǔ)還是不夠的,尤其是在Python的數(shù)據(jù)結(jié)構(gòu)方面。

今天就來(lái)給大家講講Python中的容器、可迭代對(duì)象、迭代器和生成器這些難理解的概念,讓你的Python基礎(chǔ)更上一層樓!

一、容器

1.什么是容器?

在Python中,容器是把多種元素組織在一起的數(shù)據(jù)結(jié)構(gòu),容器中的元素就可以逐個(gè)迭代獲取。說白了,它的作用就像它的名字一樣:用來(lái)存放東西(數(shù)據(jù))。

容器實(shí)際上是不存在的,它并不是一種數(shù)據(jù)類型,只是人為的一種概念,只是為了方便學(xué)習(xí)所創(chuàng)造的一個(gè)概念詞,它可以用成員關(guān)系操作符(in或not in)來(lái)判斷對(duì)象是否在容器里面。

當(dāng)然了,它不是我創(chuàng)造的,我沒有那么大本事哈,是官方創(chuàng)造的好吧,你也不用擔(dān)心我是在教你一些奇奇怪怪的名詞,說出去別人都聽不懂…python中都是這么叫的。常見的容器類型有列表(list)、元組(tuple)、字符串(str)、字典(dict)以及集合(set )

既然容器里面的數(shù)據(jù)是可以迭代獲取的,那么我們又得來(lái)學(xué)一個(gè)新概念:可迭代對(duì)象。


二、可迭代對(duì)象

1.什么是可迭代對(duì)象?

在python中,可迭代對(duì)象并不是指某種具體的數(shù)據(jù)類型,它是指存儲(chǔ)了元素的一個(gè)容器對(duì)象

也就是說,如果容器里面沒有存儲(chǔ)數(shù)據(jù),那它就不是可迭代對(duì)象,并不是所有的容器都是可迭代對(duì)象,容器包含但并不僅限于可迭代對(duì)象。

注意兩個(gè)點(diǎn):

1.很多容器都是可迭代對(duì)象(容器包含了可迭代對(duì)象)。  2.一個(gè)可迭代對(duì)象是不能獨(dú)立的進(jìn)行迭代的,迭代是通過for來(lái)完成的,凡是可迭代對(duì)象都可以直接使用for循環(huán)進(jìn)行訪問。

for循環(huán)大家應(yīng)該不陌生吧?有沒有想過,for循環(huán)內(nèi)部是怎么實(shí)現(xiàn)的?比如說這個(gè)for循環(huán)的例子,為什么能輸出列表里的每一個(gè)元素?它的內(nèi)部是怎么實(shí)現(xiàn)的?

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

其實(shí)for循環(huán)做了兩件事情:

1.使用 __iter__() 返回1個(gè)迭代器,迭代器在下面會(huì)講,這里先知道有這么個(gè)東西。  2.使用 __next__() 獲取迭代器中的每一個(gè)元素。

那么我們不用for循環(huán)來(lái)輸出列表里的每一個(gè)元素,

l = [1,2,3,4]# for i in l:#     print(i)ite =l.__iter__() #接收一下ietr()干了什么print(ite)   #打印print(ite.__next__())     #for循環(huán)干第2件事情的時(shí)候做的第1步print(ite.__next__())     #for循環(huán)干第2件事情的時(shí)候做的第2步print(ite.__next__())     #for循環(huán)干第2件事情的時(shí)候做的第3步print(ite.__next__())     #for循環(huán)干第2件事情的時(shí)候做的第4步

輸出結(jié)果:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

可以看出來(lái),如果我們?nèi)サ裟男写蛴te的代碼,執(zhí)行效果就是跟for循環(huán)輸出列表里面的每一個(gè)元素是一樣的,for循環(huán)里面限定了范圍是4次,實(shí)際上就執(zhí)行了1次__iter__()和4次__next__(),也就是說for循環(huán)訪問迭代對(duì)象的本質(zhì)就是通過這么去實(shí)現(xiàn)的。

而且,for循環(huán)本質(zhì)上干的那兩件事情,缺一不可,也就是說如果沒有__iter__()先返回了迭代器,__next()__也無(wú)法獲取到元素,恰恰說明了前面說要注意的兩點(diǎn)中的第2點(diǎn):一個(gè)可迭代對(duì)象是不能獨(dú)立的進(jìn)行迭代的。

有兩個(gè)內(nèi)置函數(shù)跟它們?cè)硎且粯拥模举|(zhì)相同,一般要用的話用內(nèi)置函數(shù)要方便一些,起碼不用寫那么多下劃線:

內(nèi)置函數(shù) iter() 的本質(zhì)是 __inter__() ,也是返回一個(gè)迭代器。  內(nèi)置函數(shù) next() 的本質(zhì)是 __next__(),也是有了迭代器之后獲取元素。

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

可以看出來(lái)結(jié)果也是一模一樣的,既然講到了迭代器,那么就來(lái)看看什么是迭代器。

三、迭代器

通過上面的for循環(huán)例子我們大概也能看得出來(lái),

只要是實(shí)現(xiàn)了__iter__()和__next__()的對(duì)象,就是迭代器,迭代器是一個(gè)可迭代對(duì)象。  總之,迭代器是有__iter__()生成,可以通過__next__()進(jìn)行調(diào)用。

既然如此,我們?cè)趯W(xué)Python基礎(chǔ)的時(shí)候講過range()是一個(gè)可迭代對(duì)象,那么它也是可以通過__iter__()生成一個(gè)迭代器的。

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器


四、序列

序列在【賦值語(yǔ)句】那個(gè)專題文章中我有提過,這里再講一下,序列也是一個(gè)抽象的概念,它包含了列表、元組和字符串,它本身是不存在的,也是便于學(xué)習(xí)所創(chuàng)造的一個(gè)概念詞。

可迭代對(duì)象包含序列,既然序列包含了列表、元組和字符串,前面我們的例子中也涉及到 了,所以說序列可以被iter()和next()使用

序列可以分為有限序列和無(wú)限序列。有限序列就是有范圍的,比如說range(10)就已經(jīng)限定了范圍,相反的,無(wú)限序列也就是沒有限定范圍的序列。

我們來(lái)生成一個(gè)無(wú)限序列,這里需要用到1個(gè)新模塊itertools,itertools用于高效循環(huán)的迭代函數(shù)集合,它下面有一個(gè)方法count(),可生成迭代器且無(wú)范圍,可以理解為無(wú)限迭代器。

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

通過這個(gè)例子我們可以看出來(lái),只要執(zhí)行一次,next()就會(huì)獲取一次迭代器里面的內(nèi)容并逐次獲取,我這里只寫了4個(gè)next(),你多寫幾次就會(huì)多輸出幾次。

像next()這種什么時(shí)候需要就什么時(shí)候調(diào)用的機(jī)制叫做懶加載機(jī)制,也叫懶漢式加載;

相反地就有餓漢式加載。比如for循環(huán)這種的,只要一執(zhí)行就會(huì)把可迭代器里面的所有對(duì)象都獲取。


五、列表推導(dǎo)式

列表推導(dǎo)式跟生成器有關(guān),在講生成器之前,需要先知道什么是列表推導(dǎo)式,列表推導(dǎo)式就是生成列表的一種方法,語(yǔ)法是這樣的:

l = [i for i in 可迭代對(duì)象]

i表示要放進(jìn)列表里的對(duì)象,for循環(huán)是一個(gè)式子。

比如我們用列表推導(dǎo)式來(lái)生成一個(gè)列表試試:

l = [i for i in range(5)]print(l)

運(yùn)行結(jié)果:

[0, 1, 2, 3, 4]

運(yùn)用列表推導(dǎo)式可以很方便地生成我們想要的列表。

同時(shí)它也有很多靈活的用法,比如在后面加上條件判斷

l = [i for i in range(5) if 4<5]print(l)

運(yùn)行結(jié)果:

[0, 1, 2, 3, 4]

if后面的條件判斷為真,則可以正常生成列表,如果為假,則列表推導(dǎo)式是無(wú)效的,此時(shí)的l將是一個(gè)空列表。

還有其他靈活的用法,比如操作前面的i,比如讓i的數(shù)值全都翻2倍:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

我們把迭代對(duì)象換一下,換成字符串,也同樣可以輸出,只是*在字符串里面表示重復(fù)操作符,所以效果變成了這樣:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

不僅如此,前面的i*2我們還可以用函數(shù)來(lái)進(jìn)行操作,比如:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

總而言之,列表推導(dǎo)式就是用來(lái)快速和自定義生成列表的一種方法,很靈活

那么有人可能會(huì)舉一反三了,列表推導(dǎo)式都是用 [] 來(lái)進(jìn)行操作的,那如果用()來(lái)操作行嗎?它會(huì)不會(huì)生成一個(gè)元組?我們來(lái)看看:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

[] 換成()之后,返回的是一個(gè)生成器generrator ,那么下面我們?cè)賮?lái)講講生成器:


六、生成器

生成器是真實(shí)存在于Python中的對(duì)象,與容器這種概念詞是不同的,它是可以直接通過next()進(jìn)行調(diào)用的。

1.生成器的第一種創(chuàng)建方法:生成器表達(dá)式

第一種創(chuàng)建方法跟列表推導(dǎo)式是差不多的,就是 [] 換成了():

l = (i for i in 可迭代對(duì)象)

比如我們來(lái)生成一個(gè)生成器,看看能不能用next()直接調(diào)用:

l = (i for i in "abcd")print(next(l))

運(yùn)行結(jié)果:

a

可以看出,生成器是可以直接調(diào)用的。那么既然生成器可以被next()調(diào)用,那么生成器就是一個(gè)特殊的迭代器,是一個(gè)可迭代對(duì)象

2.生成器的第二種創(chuàng)建方法:yield

除了用上面那種方法創(chuàng)建生成器,還可以用yield來(lái)創(chuàng)建,方法如下:

yield 關(guān)鍵字

比如說我們用一個(gè)函數(shù)中包含yield來(lái)創(chuàng)建生成器:

def fun():     a = 10     while 1:         a += 1         yield a   b = fun()print(b)

運(yùn)行結(jié)果:

<generator object fun at 0x000001F2AD95E900>

結(jié)果就是生成了一個(gè)生成器,而且此時(shí)的函數(shù)fun()就已經(jīng)不再是一個(gè)函數(shù)了,它是一個(gè)生成器,只要函數(shù)中出現(xiàn)了yield,函數(shù)就變成了生成器。

為什么while循環(huán)沒有一直執(zhí)行?先不著急,我們輸出看看:

def fun():     a = 10     while 1:         a += 1         yield a   b = fun()print(next(b))print(next(b))print(next(b))

運(yùn)行結(jié)果:

111213

我調(diào)用了三次,所以它就運(yùn)行了三次,while循環(huán)雖然存在,但是卻不起作用,是因?yàn)榍懊嫖覀兲徇^的懶漢式加載

什么時(shí)候需要了,什么時(shí)候用next()調(diào)用,就是懶漢式加載,不像餓漢式加載那樣,提前生成了所有對(duì)象,如果這里換成for循環(huán)來(lái)完成,比如:

def fun():     a = 10     while 1:         a += 1         print(a)b = fun()

運(yùn)行之后程序?qū)?huì)進(jìn)入死循環(huán),一直給a自加1,你可以試試看效果,這就是餓漢式加載提前生成了迭代器并調(diào)用了全部迭代器對(duì)象,餓漢式加載占用資源的放大鏡

七、小結(jié)

今天講的內(nèi)容可能聽起來(lái)比較枯燥,這也是沒得辦法的,有些東西第一次聽可能有點(diǎn)”難以下咽“,見得多了之后就習(xí)慣了,你得強(qiáng)迫自己去試著接受和理解這些抽象的東西。

最后用一張圖來(lái)總結(jié)一下它們的關(guān)系:

Python詳細(xì)解析之容器、可迭代對(duì)象、迭代器以及生成器

推薦學(xué)習(xí):python教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
激情婷婷亚洲| 男女性色大片免费观看一区二区| 亚洲欧美高清| 欧美不卡视频| 伊人久久大香线蕉av不卡| 日本精品影院| 亚洲精品小说| 日韩中文欧美在线| 亚洲精品自拍| 91大神在线观看线路一区| 日本伊人久久| 欧美亚洲色图校园春色| 日韩综合一区二区| 日本伊人久久| 久久av日韩| 91欧美国产| 四虎4545www国产精品| 91精品推荐| 日韩午夜黄色| 亚洲精品系列| 国产伦精品一区二区三区在线播放| 久久国产乱子精品免费女| 欧美激情aⅴ一区二区三区| 日韩综合在线| 欧美一区二区性| 久久福利毛片| 国产精品日本一区二区三区在线| 婷婷综合一区| 久久精品三级| 免费观看不卡av| 亚洲精品一二| 精品一区二区三区四区五区| 久久国产日韩| 国产模特精品视频久久久久| 欧美日本久久| 91看片一区| 亚洲影院天堂中文av色| 国产精品乱战久久久| 日韩欧美少妇| 深夜日韩欧美| 捆绑调教日本一区二区三区| 丝袜美腿亚洲色图| 久久精品99国产精品日本| 色爱综合网欧美| 宅男噜噜噜66国产日韩在线观看| 欧美亚洲福利| 激情婷婷久久| 久久国产日韩欧美精品| 欧美日韩在线二区| 国产欧美三级| 久久国产亚洲| 国产日韩欧美一区在线| 99久久精品网| 欧美日韩中出| 激情久久中文字幕| 欧美日韩亚洲国产精品| 日韩专区精品| 亚洲精品亚洲人成在线观看| 日韩欧美1区| 日本中文字幕一区二区视频| 精品日本视频| 中文字幕视频精品一区二区三区| 欧美精品1区| 日韩精品一区第一页| 精品美女久久| 日韩区欧美区| 蜜桃国内精品久久久久软件9| 国产精品午夜一区二区三区| 亚洲一级在线| 亚洲伦乱视频| 欧美精品福利| 亚洲男女自偷自拍| 精品高清久久| 日韩一区二区三区四区五区| 亚洲天堂1区| 麻豆精品视频在线| 亚洲一级淫片| 最新亚洲一区| 日本在线高清| 国产伦精品一区二区三区视频 | 久久99精品久久久野外观看| 黄色日韩在线| 精品国产一区二区三区av片| 最新国产精品久久久| 亚洲伦乱视频| 精品视频亚洲| 国产免费久久| 日韩三级久久| 亚洲一区二区三区高清| 日韩综合在线| 欧美精品不卡| 日本亚洲欧洲无免费码在线| 亚洲午夜91| 国产精品yjizz视频网| 国产精品一区二区三区av麻| 日韩精品一级中文字幕精品视频免费观看| 亚洲成人一区在线观看| 精品亚洲二区| 欧美日韩一区二区三区四区在线观看| 国产精品免费看| 99精品一区| 天堂√中文最新版在线| 精品一区二区三区中文字幕视频 | 日本麻豆一区二区三区视频| 午夜久久久久| 日本蜜桃在线观看视频| 久久久久伊人| 国产精品第一| 国产欧美自拍一区| 欧美一级二级三级视频| 亚洲开心激情| 亚洲制服一区| 午夜精品福利影院| 婷婷五月色综合香五月| 国产模特精品视频久久久久| 99香蕉国产精品偷在线观看 | 岛国av免费在线观看| 久久精品一本| 欧美激情精品| 麻豆成人91精品二区三区| 久久久久伊人| 国产一区二区三区亚洲| 精品欧美视频| 岛国av免费在线观看| 成人片免费看| 久久男女视频| 久久一区二区三区电影| 91精品一区二区三区综合在线爱 | 中文在线不卡| 免费久久99精品国产自在现线| 欧美日韩激情在线一区二区三区| 麻豆精品蜜桃| 女同性一区二区三区人了人一| 免费精品国产的网站免费观看| 999久久久国产精品| 久久理论电影| 国产精品毛片在线| 免费在线观看不卡| 日韩av二区在线播放| 久久精品xxxxx| 里番精品3d一二三区| 国产精品国产一区| 日韩在线二区| 欧美日韩少妇| 久久亚洲电影| 欧美精品国产| 一区二区精品伦理...| 欧美成人高清| 三级在线观看一区二区| 亚洲97av| 久久99性xxx老妇胖精品| 福利片在线一区二区| 999久久久国产精品| 制服诱惑一区二区| 亚洲+小说+欧美+激情+另类| 国产九一精品| 国产suv精品一区| 不卡一区2区| 中文字幕亚洲精品乱码| 日本欧美大码aⅴ在线播放| 麻豆精品视频在线观看| 久久久久.com| 蜜臀久久99精品久久久画质超高清| 中文字幕亚洲精品乱码| 国产欧美另类| 91精品啪在线观看国产18| 视频一区二区三区在线| 国产精品蜜月aⅴ在线| 日韩在线欧美| 少妇精品在线| 你懂的国产精品永久在线| 久久久久久久久久久9不雅视频| 欧美综合二区| 麻豆精品在线观看| 久久蜜桃精品| 国产亚洲欧美日韩精品一区二区三区 | 国产精品美女久久久| 欧美欧美黄在线二区| 亚洲精品.com| 日本免费新一区视频| 日韩欧美精品| 亚洲精品动态| 五月天av在线| 日韩中文字幕无砖| 夜鲁夜鲁夜鲁视频在线播放| 久久亚洲美女| 成人在线免费观看网站| 国产午夜精品一区二区三区欧美 | 久久精品观看| 三级欧美韩日大片在线看| 精品国产不卡| 日韩精品一卡二卡三卡四卡无卡| 麻豆精品蜜桃视频网站| 黄色av一区| 风间由美中文字幕在线看视频国产欧美 | 美女高潮久久久| 国产精品美女久久久| 日韩.com| 日韩高清二区| 欧美在线网站|