這篇文章主要介紹“python迭代、可迭代、迭代器的區(qū)別有哪些”,在日常操作中,相信很多人在python迭代、可迭代、迭代器的區(qū)別有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”python迭代、可迭代、迭代器的區(qū)別有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、南開網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為南開等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
可迭代對(duì)象常見的有str、list、tuple、dict等,對(duì)這些容器訪問(wèn)其內(nèi)部元素時(shí)可以用“對(duì)象[下標(biāo)]”的方式。實(shí)際上是因?yàn)閜ython對(duì)這些對(duì)象封裝了getitem方法,以下通過(guò)斐波那契數(shù)列類的案例來(lái)了解getitem的定義方法。
class Fib(object):
# count表示生成斐波那契數(shù)列的個(gè)數(shù)
def __init__(self, count):
self.count = count
# 保存前兩個(gè)值
self.x = 0
self.y = 1
# 記錄生成數(shù)列的下標(biāo)
# 聲明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]
5python解釋器在遇到對(duì)象后跟方括號(hào)[]取值時(shí),會(huì)調(diào)用該對(duì)象的getitem方法,若要賦值調(diào)用setitem方法,若要?jiǎng)h除調(diào)用delitem方法。
實(shí)際上上述代碼存在缺陷,表面是可迭代對(duì)象,實(shí)際是迭代器,因?yàn)槊總€(gè)元素都是實(shí)時(shí)生成的,而且不能對(duì)其修改。若嘗試fib6[2]=5會(huì)報(bào)錯(cuò)。
class Fib(object):
# count表示生成斐波那契數(shù)列的個(gè)數(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]上述代碼是真正的可迭代對(duì)象,因?yàn)槊總€(gè)元素都是保存在列表中,可以對(duì)其修改,例如嘗試fib6[2]=5不會(huì)報(bào)錯(cuò)。
注:以上代碼對(duì)slice第三參數(shù)未處理,修改值時(shí)也只能一個(gè)個(gè)改,但不影響深入理解可迭代對(duì)象。
到此,關(guān)于“python迭代、可迭代、迭代器的區(qū)別有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
網(wǎng)頁(yè)題目:python迭代、可迭代、迭代器的區(qū)別有哪些
網(wǎng)頁(yè)網(wǎng)址:http://www.chinadenli.net/article30/isphso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、定制開發(fā)、用戶體驗(yàn)、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)