第四十八課:魔法方法:迭代器

內(nèi)容來源于網(wǎng)絡,本人只是在此稍作整理,如有涉及版權(quán)問題炮叶,歸小甲魚官方所有答朋。

練習題(來自小甲魚官方論壇)

0.請用你的話解釋一下“迭代”的概念贷揽。

答:迭代是重復反饋過程的活動,其目的通常是為了接近并到達所需的目標或結(jié)果梦碗。每一次對過程的重復被稱為一次迭代禽绪,而每一次迭代得到的結(jié)果會被用來作為下一次迭代的初始值。


1.迭代器是一個容器嗎洪规?

答:不是印屁。因為我們耳熟能詳?shù)娜萜飨窳斜怼⒆值湔独⒃M都是可以存放數(shù)據(jù)的雄人,而迭代器就是實現(xiàn)了__ next__()方法的對象(用于遍歷容器中的數(shù)據(jù))。


2.迭代器可以回退(獲取上一個值)嗎?

答:迭代器性質(zhì)決定沒有辦法回退础钠,只能往前進行迭代恰力。但這并不是什么很大的缺點,因為我們幾乎不需要再迭代途中進行回退操作旗吁。


3.如何快速判斷一個容器是否具有迭代功能踩萎?

答:判斷該容器是否擁有__ iter__()和__ next__()魔法方法。


5.在Python原生支持的數(shù)據(jù)結(jié)構(gòu)中很钓,你知道哪一個是只能用迭代器訪問的嗎香府?

答:對于原生支持隨機訪問的數(shù)據(jù)結(jié)構(gòu)(如tuple、list)码倦,迭代器和經(jīng)典for循環(huán)的索引訪問相比并無優(yōu)勢企孩,反而丟失了索引值(可以使用內(nèi)建函數(shù)enumerate()找回這個索引值,這是后話)袁稽。但對于無法隨機訪問的數(shù)據(jù)結(jié)構(gòu)(比如set)而言柠硕,迭代器是唯一的訪問元素的方式。


編程題

0.用while語句實現(xiàn)以下for 語句相同的功能:

for each in range(5):
    print(each)

答:

alist = range(5)
it = iter(alist)

while True:
    try:
        print(next(it))
    except StopIteration:
        break

1.寫一個迭代器运提,要求輸出至今為止的所有閏年蝗柔。如:

答:

import datetime as dt

class LeapYear:
    def __init__(self):
        self.now = dt.date.today().year

    def isLeapYear(self, year):
        if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
            return True
        else:
            return False

    def __iter__(self):
        return self

    def __next__(self):
        while not self.isLeapYear(self.now):
            self.now -= 1

        temp = self.now
        self.now -= 1

        return temp

ly = LeapYear()
for i in ly:
    if i > 2000:
        print(i)
    else:
        break

輸出:

2016
2012
2008
2004

2.要求自己寫一個MyRev類,功能與reversed()相同(內(nèi)置函數(shù)reversed(seq)民泵,是返回一個迭代器癣丧,是序列seq的逆序顯示)。例如:

>>> myRev = MyRev("FishC")
>>>for i in myRev:
      print(i, end=' ')

答:代碼如下

class MyRev:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration

        self.index = self.index - 1
        return self.data[self.index]

myRev = MyRev("FishC")
for i in myRev:
    print(i, end=' ')

3.請寫下這一節(jié)課你學習到的內(nèi)容:格式不限栈妆,回憶并復述是加強記憶的好方式胁编!

  • 迭代器的魔法方法
    __ iter__():返回迭代器本身;
    __ next__():這里寫迭代的規(guī)律鳞尔。
    舉個例子:
class Fibs:
    def __init__(self, n=20):
        self.a = 0
        self.b = 1
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > self.n:
            raise StopIteration
        return self.a

fibs = Fibs(20)
for each in fibs:
    print(each)

輸出:

1
1
2
3
5
8
13

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嬉橙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寥假,更是在濱河造成了極大的恐慌市框,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕韧,死亡現(xiàn)場離奇詭異枫振,居然都是意外死亡,警方通過查閱死者的電腦和手機萤彩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門粪滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雀扶,你說我怎么就攤上這事杖小。” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵予权,是天一觀的道長县踢。 經(jīng)常有香客問我,道長伟件,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任议经,我火速辦了婚禮斧账,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煞肾。我一直安慰自己咧织,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布籍救。 她就那樣靜靜地躺著习绢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝙昙。 梳的紋絲不亂的頭發(fā)上闪萄,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音奇颠,去河邊找鬼败去。 笑死,一個胖子當著我的面吹牛烈拒,可吹牛的內(nèi)容都是我干的圆裕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼荆几,長吁一口氣:“原來是場噩夢啊……” “哼吓妆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吨铸,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤行拢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诞吱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剂陡,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年狐胎,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸭栖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡握巢,死狀恐怖晕鹊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤溅话,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布晓锻,位于F島的核電站,受9級特大地震影響飞几,放射性物質(zhì)發(fā)生泄漏砚哆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一屑墨、第九天 我趴在偏房一處隱蔽的房頂上張望躁锁。 院中可真熱鬧,春花似錦卵史、人聲如沸战转。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽槐秧。三九已至,卻和暖如春忧设,著一層夾襖步出監(jiān)牢的瞬間刁标,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工址晕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留命雀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓斩箫,卻偏偏與公主長得像吏砂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乘客,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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

  • 從三月份找實習到現(xiàn)在狐血,面了一些公司,掛了不少易核,但最終還是拿到小米匈织、百度、阿里牡直、京東缀匕、新浪、CVTE碰逸、樂視家的研發(fā)崗...
    時芥藍閱讀 42,207評論 11 349
  • 1 場景問題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個實際應用:整合工資表數(shù)據(jù)乡小。 這個項目的背景是這樣的,項目...
    七寸知架構(gòu)閱讀 2,535評論 0 53
  • 本文由幣車HIT(biche.yaofache.com)大V養(yǎng)成計劃支持 技術(shù)分析廣泛存在于股票饵史、期貨市場以及幣圈...
    小明外面的世界閱讀 149評論 0 0
  • “對自己狠一點,世界才會對你好一點湃番∝仓”希望以這句話作為警言,能更嚴格地要求自己吠撮。 作為一個25+的女生尊惰,已經(jīng)經(jīng)歷了...
    Eva華閱讀 1,048評論 0 1
  • 平陽花藝培訓,不忘卻自己的花藝夢想 花藝心聲 不知不覺中泥兰,忙于生計的我們把生活過成了粗糙模樣 好像生活就是簡單的生...
    媞亞花語閱讀 521評論 0 0