python迭代器和生成器

一脉漏、什么是迭代器協(xié)議

  1.迭代器協(xié)議是指:對象必須提供一個next方法,執(zhí)行該方法要么返回迭代中的下一項袖牙,要么就引起一個stoplteration異常侧巨,以終止迭代(只能? ? ? ? ? ? ?往后走,不能往前退)

  2.可迭代對象:實現(xiàn)了迭代器協(xié)議的對象(如何實現(xiàn):對象內(nèi)部定義一個__iter__()方法)

  3.協(xié)議是一種約定鞭达,可迭代對象實現(xiàn)了迭代器協(xié)議刃泡,python的內(nèi)部工具(如for循環(huán),sum碉怔,min烘贴,max函數(shù)等)使用迭代器協(xié)議訪問對象


可迭代對象

可迭代對象泛指一類對象,不是指的每一種對象撮胧,確切的說滿足以下的條件的對象可以成為可迭代對象:

1. 對象實現(xiàn)了__iter__方法

2. __iter__方法返回了一個迭代器對象

我們比較容易理解的可迭代對象桨踪,比如說可以用for語句去遍歷,實際for語句的內(nèi)部實現(xiàn)應(yīng)該就是首先調(diào)用對象的__iter__方法芹啥,獲取一個迭代器對象锻离,接著不停的調(diào)用迭代器對象的__next__方法,循環(huán)遍歷取值墓怀。

迭代器對象(迭代器)

迭代器協(xié)議包括這些條件:

1.對象實現(xiàn)了__next__方法

2.__next__方法返回了某個數(shù)值(當(dāng)然一般情況下汽纠,我們需要的是返回這個對象的特定的數(shù)字,并且按照一定的順序進行依次返回)

3.__next__方法需要在值取完的時候傀履,拋出StopIteration的錯誤信息虱朵。

總結(jié):

可迭代對象是 調(diào)用對象的__iter__方法能夠返回迭代器對象的一種對象。

迭代器對象是實現(xiàn)了迭代器協(xié)議的對象钓账。


迭代器應(yīng)用

運行主函數(shù)


二碴犬、什么是生成器?

可以理解為一種數(shù)據(jù)類型梆暮,這種數(shù)據(jù)類型自動實現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類型需要調(diào)用自己的內(nèi)置的__iter__方法)服协,所以生成器就是可迭代對象

1.生成器函數(shù):常規(guī)函數(shù)的定義,但是啦粹,使用yield語句而不是return語句返回結(jié)果偿荷。yield語句語句一次返回一個結(jié)果窘游,在每個結(jié)果中間,掛起函數(shù)的狀態(tài)跳纳,以便下次從它離開的地方繼續(xù)執(zhí)行


2.生成器表達式:類似于列表推導(dǎo)忍饰,但是,生成器返回按需產(chǎn)生結(jié)果的一個對象棒旗,而不是一次構(gòu)建一個結(jié)果列表



為何使用生成器之生成器的特點

Python使用生成器對延遲操作提供了支持喘批。所謂延遲操作撩荣,是指在需要的時候才產(chǎn)生結(jié)果铣揉,而不是立即產(chǎn)生結(jié)果。這也是生產(chǎn)層器的主要好處餐曹。

生成器小結(jié):

a.是可迭代對象

b.實現(xiàn)了延遲計算逛拱,省內(nèi)存

c.生成器本質(zhì)和其他的數(shù)據(jù)類型一樣,都是實現(xiàn)了迭代器協(xié)議台猴,只不過生成器附加了一個延遲計算省內(nèi)存的好處


三朽合、生成器讀取大量數(shù)據(jù)應(yīng)用案例




文件實例:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饱狂,隨后出現(xiàn)的幾起案子曹步,更是在濱河造成了極大的恐慌,老刑警劉巖休讳,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讲婚,死亡現(xiàn)場離奇詭異,居然都是意外死亡俊柔,警方通過查閱死者的電腦和手機筹麸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雏婶,“玉大人物赶,你說我怎么就攤上這事×敉恚” “怎么了酵紫?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長错维。 經(jīng)常有香客問我憨闰,道長,這世上最難降的妖魔是什么需五? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任鹉动,我火速辦了婚禮,結(jié)果婚禮上宏邮,老公的妹妹穿的比我還像新娘泽示。我一直安慰自己缸血,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布械筛。 她就那樣靜靜地躺著捎泻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埋哟。 梳的紋絲不亂的頭發(fā)上笆豁,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音赤赊,去河邊找鬼闯狱。 笑死,一個胖子當(dāng)著我的面吹牛抛计,可吹牛的內(nèi)容都是我干的哄孤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吹截,長吁一口氣:“原來是場噩夢啊……” “哼瘦陈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起波俄,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晨逝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后懦铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捉貌,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡阀趴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年昏翰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刘急。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡棚菊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叔汁,到底是詐尸還是另有隱情统求,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布据块,位于F島的核電站码邻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏另假。R本人自食惡果不足惜像屋,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边篮。 院中可真熱鬧己莺,春花似錦奏甫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胜蛉,卻和暖如春挠进,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誊册。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工领突, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人解虱。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓攘须,卻偏偏與公主長得像漆撞,于是被迫代替她去往敵國和親殴泰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 迭代 如果給定一個list或tuple浮驳,我們可以通過for循環(huán)來遍歷這個list或tuple悍汛,這種遍歷我們稱為迭代...
    Mr_Bluyee閱讀 985評論 0 1
  • 文章來源:python 生成器和迭代器有這篇就夠了 什么是迭代器? 迭代器是訪問集合元素的一種方式至会。迭代器對象從集...
    YYL07閱讀 541評論 0 4
  • 我們知道我們可以用列表儲存數(shù)據(jù)离咐,可是當(dāng)我們的數(shù)據(jù)特別大的時候建立一個列表的儲存數(shù)據(jù)就會很占內(nèi)存的。如通過...
    mysimplebook閱讀 248評論 0 0
  • 作者:邵正將 來源:PytLab 在python中生成器可以很方便的實現(xiàn)迭代協(xié)議奉件。生成器通過生成器函數(shù)產(chǎn)生宵蛀,生成器...
    PyChina閱讀 1,574評論 0 6
  • 放眼整個樂壇术陶,恐怕再也找不出一個像Beyond的樂隊,他們憑借著不死的音樂精神煤痕,影響了一代又一代人梧宫。他們的歌,唱家...
    壹號公園音樂藝術(shù)閱讀 2,087評論 0 3