Python?迭代器Iterator詳情
前言
當(dāng)我們需要對(duì)列表(list)、元組(tuple)、字典(dictionary)和集合(set)的元素進(jìn)行遍歷時(shí),其實(shí)Python內(nèi)部都是啟動(dòng)迭代器來(lái)完成操作的。
迭代器(Iterator)并非Python獨(dú)有的,在C++和Java中也出現(xiàn)了此概念。迭代器可以幫助我們解決面對(duì)復(fù)雜的數(shù)據(jù)場(chǎng)景時(shí),快速簡(jiǎn)便的獲取數(shù)據(jù)。
1. 什么是迭代器?
- 迭代器是一個(gè)表示數(shù)據(jù)流的對(duì)象,當(dāng)我們調(diào)用next()方法時(shí)會(huì)返回容器中的下一個(gè)值
- 迭代器中包含
__iter__
和__next__()
方法。通過(guò)__iter__
方法可以返回迭代器對(duì)象本身的方法。__next__()
方法會(huì)使cur指針始終指向當(dāng)前位置,即返回容器中的下一個(gè)值,如果容器中沒(méi)有更多元素了,則會(huì)拋出StopIteration異常。 - 迭代器(iterator)也是可迭代的對(duì)象(iterable)
2. 迭代器類(lèi)型
- Python中支持容器進(jìn)行迭代,同時(shí)也提供迭代器協(xié)議支持用戶(hù)自定義類(lèi)進(jìn)行迭代
- 容器迭代器:
container.__iter__()
方法實(shí)現(xiàn)容器對(duì)象迭代 - 迭代器協(xié)議:
__iter__()
方法和__next__()
方法 __iter__()
:返回迭代器本身,容器可以與for...in結(jié)合使用__next__()
:返回迭代器返回下一項(xiàng)
3. 迭代器分類(lèi)
容器迭代器
data = [1,2,3,4] it = iter(data) print(next(it)) print(next(it))
- Python中提供的內(nèi)置容器有:list、tuple、dictionary 和 set都是可迭代對(duì)象
- 調(diào)用iter()方法獲取對(duì)應(yīng)的迭代對(duì)象
- 調(diào)用next()方法獲取迭代對(duì)象下一項(xiàng)值。每一次調(diào)用next之后,會(huì)自動(dòng)往后移到到一位,獲取后面一位的數(shù)據(jù)。
遍歷迭代器
for i in it: print(i)
對(duì)于可迭代對(duì)象,我們也可以使用for...in來(lái)進(jìn)行迭代
自定義迭代器
class Myiter: def __init__(self,times): self.times = times def __iter__(self): self.n = 0 return self def __next__(self): if self.n <= self.times: result = 3 ** self.n self.n += 1 return result else: raise StopIteration data = Myiter(4) it = iter(data) # 第1次 print(next(it)) # 第2次 print(next(it)) # 第3次 print(next(it)) # 第4次 print(next(it)) # 第5次 print(next(it)) # 第6次,超出范圍觸發(fā)StopIteration print(next(it)) ... 1 3 9 27 81 Traceback (most recent call last): File "E:\workspace\uiat\cookbooks\tester.py", line 67, in <module> print(next(it)) File "E:\workspace\uiat\cookbooks\tester.py", line 51, in __next__ raise StopIteration StopIteration ...
- 創(chuàng)建的對(duì)象/類(lèi)需要實(shí)現(xiàn)
__iter__()
和__next__()
兩個(gè)方法即可作為迭代器 - 迭代器中__iter__()返回迭代器本身方法
- 迭代器中__next__()方法允許進(jìn)行其他操作,但是必須返回迭代器的下一項(xiàng)
- 為了防止迭代永遠(yuǎn)進(jìn)行下去,Python提供stopIterator語(yǔ)句,終止迭代
總結(jié)
本期,我們對(duì)Python Iterator迭代器由__iter__()方法和__next__()方法組成。迭代器分為Iterator和iteratable兩種,因此迭代器本身也是可迭代對(duì)象的。
迭代器分為容器迭代和自定義迭代。
到此這篇關(guān)于Python 迭代器Iterator詳情的文章就介紹到這了,更多相關(guān)Python Iterator內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法
今天小編就為大家分享一篇pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法
這篇文章主要給大家介紹了關(guān)于Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法,在大部分開(kāi)發(fā)過(guò)程中,我們需要使用到python3進(jìn)行測(cè)試,于是下載安裝python3,近乎是一種剛需,至于設(shè)置默認(rèn)python指向python3可以參考本文2023-09-09Python中dumps與dump及l(fā)oads與load的區(qū)別
這篇文章主要介紹了Python中dumps與dump、loads與load的區(qū)別,json模塊提供了一種很簡(jiǎn)單的方式來(lái)編碼和解碼JSON數(shù)據(jù)。其中兩個(gè)主要的函數(shù)是json.dumps()和json.loads(),需要的朋友可以參考下2022-04-04Python實(shí)現(xiàn)arctan換算角度的示例
本文主要介紹了Python實(shí)現(xiàn)arctan換算角度的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03