2.6Python進(jìn)階06 循環(huán)對(duì)象

這一講的主要目的是為了大家在讀Python程序的時(shí)候?qū)ρh(huán)對(duì)象有一個(gè)基本概念。
循環(huán)對(duì)象的并不是隨著Python的誕生就存在的,但它的發(fā)展迅速,特別是Python 3x的時(shí)代奢驯,循環(huán)對(duì)象正在成為循環(huán)的標(biāo)準(zhǔn)形式。

什么是循環(huán)對(duì)象

循環(huán)對(duì)象是這樣一個(gè)對(duì)象次绘,它包含有一個(gè)next()方法next()方法瘪阁,在Python 3x中),這個(gè)方法的目的是進(jìn)行到下一個(gè)結(jié)果邮偎,而在結(jié)束一系列結(jié)果之后管跺,舉出StopIteration錯(cuò)誤
當(dāng)一個(gè)循環(huán)結(jié)構(gòu)(比如for)調(diào)用循環(huán)對(duì)象時(shí)禾进,它就會(huì)每次循環(huán)的時(shí)候調(diào)用next()方法豁跑,知道StopIteration的出現(xiàn),for循環(huán)接收到泻云,就知道循環(huán)已經(jīng)結(jié)束艇拍,停止調(diào)用next()狐蜕。
假設(shè)我們有一個(gè)test.txt的文件:

1234
abcd
efg

我們運(yùn)行一下Python命令行:

>>>f = open('test.txt')
>>>f.next()
>>>f.next()
...

不斷輸入f.next(),知道最后出現(xiàn)StopIteration
open()返回的實(shí)際上市一個(gè)循環(huán)對(duì)象卸夕,包含next()方法层释。而該next()方法每次返回的就是新的一行的內(nèi)容,到達(dá)文件結(jié)尾時(shí)舉出StopIteration快集。這樣弱左,我們相當(dāng)于手工進(jìn)行了循環(huán)沉颂。
自動(dòng)進(jìn)行的話(huà)宏榕,就是:

for line in open('test.txt'):
    print line

在這里眶熬,for結(jié)構(gòu)自動(dòng)調(diào)用next()方法,將該方法的返回值賦予給line勃黍。循環(huán)直到出現(xiàn)StopIteration的時(shí)候結(jié)束。

相對(duì)于列表晕讲,用循環(huán)對(duì)象的好處在于:不用在循環(huán)還沒(méi)有開(kāi)始的時(shí)候覆获,就生成好要使用的元素。所使用的元素可以在循環(huán)過(guò)程中逐次生成瓢省。這樣弄息,節(jié)省了空間,提高了效率勤婚,編程更靈活摹量。

迭代器

從技術(shù)上來(lái)說(shuō),循環(huán)對(duì)象和for循環(huán)調(diào)用直接還有一個(gè)中間層馒胆,就是要將循環(huán)對(duì)象轉(zhuǎn)換成迭代器(iterator)缨称。這一轉(zhuǎn)化是通過(guò)使用iter()函數(shù)實(shí)現(xiàn)的。但從邏輯層面上祝迂,常衬谰。可以忽略這一層,所以循環(huán)對(duì)象和迭代器常常相互指代對(duì)方型雳。
下面是一個(gè)生成器:

def gen():
    a = 100
    yield a
    a = a*8
    yield a
    yield 1000

改生成器共有三個(gè)yield当凡,如果用作循環(huán)器時(shí),會(huì)進(jìn)行三次循環(huán)纠俭。

for i in gen():
    print i

再考慮如下一個(gè)生成器:

def gen()
    for i in range(4):
        yield i

它又可以寫(xiě)成生成器表達(dá)式(Generator Expression):

G = (x for x in range(4))

生成器表達(dá)式是生成器的一種漸變的編寫(xiě)方式沿量。大家可以進(jìn)一步查閱。

表推導(dǎo)

表推導(dǎo)(list comprehension)是快速生產(chǎn)表的方法冤荆。它的語(yǔ)法簡(jiǎn)單朴则,很有實(shí)用價(jià)值。

假設(shè)我們生產(chǎn)表L:

L = []
for x in range[10]:
    L.append(x**2)

以上產(chǎn)生了表L匙赞,單實(shí)際上有快捷的寫(xiě)法佛掖,也就是表推導(dǎo)的方式:

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

這與生成器表達(dá)式類(lèi)似妖碉,只不過(guò)用的是中括號(hào)
(表推導(dǎo)的機(jī)制實(shí)際上是利用循環(huán)對(duì)象芥被,有興趣可以查閱欧宜。)

練習(xí) 下面的表推導(dǎo)會(huì)生產(chǎn)什么?

x1 = [1,3,5]
y1 = [9,12,13]
L = [ x**2 for (x,y) in zip(x1,y1) if y >10]

總結(jié)

循環(huán)對(duì)象
生成器
表推導(dǎo)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拴魄,一起剝皮案震驚了整個(gè)濱河市冗茸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匹中,老刑警劉巖夏漱,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顶捷,居然都是意外死亡挂绰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)服赎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葵蒂,“玉大人,你說(shuō)我怎么就攤上這事重虑〖叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵缺厉,是天一觀的道長(zhǎng)永高。 經(jīng)常有香客問(wèn)我,道長(zhǎng)提针,這世上最難降的妖魔是什么命爬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮关贵,結(jié)果婚禮上遇骑,老公的妹妹穿的比我還像新娘。我一直安慰自己揖曾,他們只是感情好落萎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著炭剪,像睡著了一般练链。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奴拦,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天媒鼓,我揣著相機(jī)與錄音,去河邊找鬼。 笑死绿鸣,一個(gè)胖子當(dāng)著我的面吹牛疚沐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潮模,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亮蛔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了擎厢?” 一聲冷哼從身側(cè)響起究流,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎动遭,沒(méi)想到半個(gè)月后芬探,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厘惦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年偷仿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宵蕉。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炎疆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出国裳,到底是詐尸還是另有隱情,我是刑警寧澤全跨,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布缝左,位于F島的核電站,受9級(jí)特大地震影響浓若,放射性物質(zhì)發(fā)生泄漏渺杉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一挪钓、第九天 我趴在偏房一處隱蔽的房頂上張望是越。 院中可真熱鬧,春花似錦碌上、人聲如沸倚评。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)天梧。三九已至,卻和暖如春霞丧,著一層夾襖步出監(jiān)牢的瞬間呢岗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留后豫,地道東北人悉尾。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像挫酿,于是被迫代替她去往敵國(guó)和親构眯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 本文翻譯自Functional Programming Howto 本文將介紹Python中函數(shù)式編程的特性饭豹。在對(duì)...
    大蟒傳奇閱讀 2,613評(píng)論 4 14
  • 我們?cè)趯W(xué)習(xí)web前端的路程起步時(shí)總是疑問(wèn)拄衰,我們?nèi)绾胃玫谋闅v元素呢它褪?迭代器和生成器是什么?今天為大家?guī)吓c精彩的E...
    儂姝沁兒閱讀 3,326評(píng)論 0 6
  • 1.1==翘悉,is的使用 ·is是比較兩個(gè)引用是否指向了同一個(gè)對(duì)象(引用比較)茫打。 ·==是比較兩個(gè)對(duì)象是否相等。 1...
    TENG書(shū)閱讀 730評(píng)論 0 0
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的妖混,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,044評(píng)論 0 10
  • 如何成為理智又聰明的消費(fèi)者老赤。 一.價(jià)格奧秘。 我們要了解自己真正所需制市,清楚購(gòu)買(mǎi)目的抬旺、品牌溢價(jià)。 二.價(jià)格騙局祥楣。 1...
    翠霞_0256閱讀 160評(píng)論 0 1