這篇文章主要介紹“python迭代、可迭代、迭代器的區(qū)別有哪些”,在日常操作中,相信很多人在python迭代、可迭代、迭代器的區(qū)別有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python迭代、可迭代、迭代器的區(qū)別有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)專注于企業(yè)成都全網營銷、網站重做改版、南開網站定制設計、自適應品牌網站建設、HTML5、成都做商城網站、集團公司官網建設、成都外貿網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為南開等各大城市提供網站開發(fā)制作服務。
可迭代對象常見的有str、list、tuple、dict等,對這些容器訪問其內部元素時可以用“對象[下標]”的方式。實際上是因為python對這些對象封裝了getitem方法,以下通過斐波那契數(shù)列類的案例來了解getitem的定義方法。
class Fib(object): # count表示生成斐波那契數(shù)列的個數(shù) def __init__(self, count): self.count = count # 保存前兩個值 self.x = 0 self.y = 1 # 記錄生成數(shù)列的下標 # 聲明Fib類是可迭代的 def __iter__(self): return self def __getitem__(self, item): if isinstance(item, int): if item <= self.count: self.x = 0 self.y = 1 for x in range(item): result = self.x self.x, self.y = self.y, self.x + self.y return result else: raise TypeError('超出范圍!') elif isinstance(item, slice): start, stop = item.start, item.stop l = [] self.x = 0 self.y = 1 for x in range(stop): if x >= start: l.append(self.x) self.x, self.y = self.y, self.x + self.y return l else: raise TypeError('參數(shù)不合要求!') fib6 = Fib(6) print(fib6[0:5]) print(fib6[6]) out: [0, 1, 1, 2, 3] 5
python解釋器在遇到對象后跟方括號[]取值時,會調用該對象的getitem方法,若要賦值調用setitem方法,若要刪除調用delitem方法。
實際上上述代碼存在缺陷,表面是可迭代對象,實際是迭代器,因為每個元素都是實時生成的,而且不能對其修改。若嘗試fib6[2]=5會報錯。
class Fib(object): # count表示生成斐波那契數(shù)列的個數(shù) def __init__(self, count): self.count = count self.x = 0 self.y = 1 self.index = 0 self.row = [] for x in range(self.count): self.row.append(self.x) self.x, self.y = self.y, self.x + self.y self.index += 1 # 聲明Fib類是可迭代的 def __iter__(self): return self def __getitem__(self, item): if isinstance(item, int): if item <= self.count: return self.row[item] else: raise TypeError('超出范圍!') elif isinstance(item, slice): start, stop = item.start, item.stop return self.row[start:stop] else: raise TypeError('參數(shù)不合要求!') def __setitem__(self, item, value): if isinstance(item, int): if item <= self.count: self.row[item] = value else: raise TypeError('超出范圍!') else: raise TypeError('參數(shù)不合要求!') fib6 = Fib(6) print(fib6[:4]) fib6[2] = 5 print(fib6[:4]) out: [0, 1, 1, 2] [0, 1, 5, 2]
上述代碼是真正的可迭代對象,因為每個元素都是保存在列表中,可以對其修改,例如嘗試fib6[2]=5不會報錯。
注:以上代碼對slice第三參數(shù)未處理,修改值時也只能一個個改,但不影響深入理解可迭代對象。
到此,關于“python迭代、可迭代、迭代器的區(qū)別有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網頁題目:python迭代、可迭代、迭代器的區(qū)別有哪些
網頁網址:http://muchs.cn/article30/isphso.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、定制開發(fā)、用戶體驗、手機網站建設、軟件開發(fā)、品牌網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)