Python3之手動(dòng)創(chuàng)建迭代器的實(shí)例代碼
迭代器即可以遍歷諸如列表,字典及字符串等序列對(duì)象甚至自定義對(duì)象的對(duì)象,其本質(zhì)就是記錄迭代對(duì)象中每個(gè)元素的位置。迭代過(guò)程從第一個(gè)元素至最后一個(gè)元素,且過(guò)程不能回滾或反方向迭代。
兩個(gè)基本方法iter、next
序列對(duì)象可以利用 iter() 直接創(chuàng)建迭代器,并通過(guò) next() 即可迭代迭代器。
利用for循環(huán)迭代
S = 'PYTHON' IT = iter(S) for it in IT: print(it)
示例結(jié)果:
P
Y
T
H
O
N
利用next()迭代
S = 'PYTHON' IT = iter(S) print(next(IT)) print(next(IT)) print(next(IT)) print(next(IT)) print(next(IT)) print(next(IT))
示例結(jié)果:
P
Y
T
H
O
N
當(dāng)我們使用next()迭代時(shí),如果迭代了次數(shù)超過(guò)了迭代器中的元素個(gè)數(shù)就會(huì)引發(fā) StopIteration ,由此我們可以利用 while 循環(huán)迭代,并不斷捕捉迭代結(jié)束的異常完成for循環(huán)的迭代過(guò)程。
S = 'PYTHON'
IT = iter(S)
while True:
try:
print(next(IT))
except StopIteration:
break
P
Y
T
H
O
N
手動(dòng)構(gòu)建迭代器
把一個(gè)類作為一個(gè)迭代器使用需要在類中實(shí)現(xiàn)兩個(gè)方法 iter () 與 next () 。 iter () 方法返回一個(gè)特殊的迭代器對(duì)象, 這個(gè)迭代器對(duì)象實(shí)現(xiàn)了 next () 方法并通過(guò) StopIteration 異常標(biāo)識(shí)迭代的完成。 next () 方法(Python 2 里是 next())會(huì)返回下一個(gè)迭代器對(duì)象。下面這個(gè)類構(gòu)造了一個(gè)迭代器接受一個(gè)可迭代的數(shù)字,每次迭代都返回上一次迭代結(jié)果的平方,當(dāng)?shù)Y(jié)果大于 9999999999999 時(shí)拋出異常。利用該類創(chuàng)建示例對(duì)數(shù)字2進(jìn)行平方和迭代。
class IT_SQUARE:
def __init__(self, x):
self.x = x
def __next__(self):
self.x = self.x ** 2
if self.x > 9999999999999:
raise StopIteration
else:
return self.x
def __iter__(self):
return self
IT1 = IT_SQUARE(2)
while True:
try:
print(IT1.__next__())
except StopIteration:
break
示例結(jié)果
4
16
256
65536
4294967296
總結(jié)
以上所述是小編給大家介紹的Python3之手動(dòng)創(chuàng)建迭代器的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
TensorFlow實(shí)現(xiàn)打印每一層的輸出
今天小編就為大家分享一篇TensorFlow實(shí)現(xiàn)打印每一層的輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python+opencv3生成一個(gè)自定義純色圖教程
今天小編就為大家分享一篇python+opencv3生成一個(gè)自定義純色圖教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python multiprocessing 進(jìn)程間通信方式實(shí)現(xiàn)
本文主要介紹了Python multiprocessing 進(jìn)程間通信方式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Mac中PyCharm配置Anaconda環(huán)境的方法
這篇文章主要介紹了Mac中PyCharm配置Anaconda環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Python實(shí)現(xiàn)備份文件實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)備份文件的方法,可實(shí)現(xiàn)針對(duì)各類常見(jiàn)擴(kuò)展名的文件進(jìn)行備份的功能,需要的朋友可以參考下2014-09-09
python廣度優(yōu)先搜索得到兩點(diǎn)間最短路徑
這篇文章主要為大家詳細(xì)介紹了python廣度優(yōu)先搜索得到兩點(diǎn)間最短路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Pycharm2017版本設(shè)置啟動(dòng)時(shí)默認(rèn)自動(dòng)打開(kāi)項(xiàng)目的方法
今天小編就為大家分享一篇Pycharm2017版本設(shè)置啟動(dòng)時(shí)默認(rèn)自動(dòng)打開(kāi)項(xiàng)目的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Python數(shù)據(jù)結(jié)構(gòu)之樹(shù)的全面解讀
數(shù)據(jù)結(jié)構(gòu)中有很多樹(shù)的結(jié)構(gòu),其中包括二叉樹(shù)、二叉搜索樹(shù)、2-3樹(shù)、紅黑樹(shù)等等。本文中對(duì)數(shù)據(jù)結(jié)構(gòu)中常見(jiàn)的樹(shù)邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)進(jìn)行了匯總,不求嚴(yán)格精準(zhǔn),但求簡(jiǎn)單易懂2021-11-11
python使用Matplotlib改變坐標(biāo)軸的默認(rèn)位置
這篇文章主要為大家詳細(xì)介紹了python使用Matplotlib改變坐標(biāo)軸的默認(rèn)位置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10

