Python?迭代器Iterator詳情
前言
當我們需要對列表(list)、元組(tuple)、字典(dictionary)和集合(set)的元素進行遍歷時,其實Python內(nèi)部都是啟動迭代器來完成操作的。
迭代器(Iterator)并非Python獨有的,在C++和Java中也出現(xiàn)了此概念。迭代器可以幫助我們解決面對復雜的數(shù)據(jù)場景時,快速簡便的獲取數(shù)據(jù)。
1. 什么是迭代器?
- 迭代器是一個表示數(shù)據(jù)流的對象,當我們調(diào)用next()方法時會返回容器中的下一個值
- 迭代器中包含
__iter__
和__next__()
方法。通過__iter__
方法可以返回迭代器對象本身的方法。__next__()
方法會使cur指針始終指向當前位置,即返回容器中的下一個值,如果容器中沒有更多元素了,則會拋出StopIteration異常。 - 迭代器(iterator)也是可迭代的對象(iterable)
2. 迭代器類型
- Python中支持容器進行迭代,同時也提供迭代器協(xié)議支持用戶自定義類進行迭代
- 容器迭代器:
container.__iter__()
方法實現(xiàn)容器對象迭代 - 迭代器協(xié)議:
__iter__()
方法和__next__()
方法 __iter__()
:返回迭代器本身,容器可以與for...in結(jié)合使用__next__()
:返回迭代器返回下一項
3. 迭代器分類
容器迭代器
data = [1,2,3,4] it = iter(data) print(next(it)) print(next(it))
- Python中提供的內(nèi)置容器有:list、tuple、dictionary 和 set都是可迭代對象
- 調(diào)用iter()方法獲取對應的迭代對象
- 調(diào)用next()方法獲取迭代對象下一項值。每一次調(diào)用next之后,會自動往后移到到一位,獲取后面一位的數(shù)據(jù)。
遍歷迭代器
for i in it: print(i)
對于可迭代對象,我們也可以使用for...in來進行迭代
自定義迭代器
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)建的對象/類需要實現(xiàn)
__iter__()
和__next__()
兩個方法即可作為迭代器 - 迭代器中__iter__()返回迭代器本身方法
- 迭代器中__next__()方法允許進行其他操作,但是必須返回迭代器的下一項
- 為了防止迭代永遠進行下去,Python提供stopIterator語句,終止迭代
總結(jié)
本期,我們對Python Iterator迭代器由__iter__()方法和__next__()方法組成。迭代器分為Iterator和iteratable兩種,因此迭代器本身也是可迭代對象的。
迭代器分為容器迭代和自定義迭代。
到此這篇關(guān)于Python 迭代器Iterator詳情的文章就介紹到這了,更多相關(guān)Python Iterator內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法
今天小編就為大家分享一篇pyqt5 lineEdit設(shè)置密碼隱藏,刪除lineEdit已輸入的內(nèi)容等屬性方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Linux下把Python3設(shè)為默認Python版本的三種方法
這篇文章主要給大家介紹了關(guān)于Linux下把Python3設(shè)為默認Python版本的三種方法,在大部分開發(fā)過程中,我們需要使用到python3進行測試,于是下載安裝python3,近乎是一種剛需,至于設(shè)置默認python指向python3可以參考本文2023-09-09Python中dumps與dump及l(fā)oads與load的區(qū)別
這篇文章主要介紹了Python中dumps與dump、loads與load的區(qū)別,json模塊提供了一種很簡單的方式來編碼和解碼JSON數(shù)據(jù)。其中兩個主要的函數(shù)是json.dumps()和json.loads(),需要的朋友可以參考下2022-04-04