1. 什么是迭代器?
- 迭代器是一個表示資料流的物件,當我們呼叫next()方法時會回傳容器中的下一個值
- 迭代器中包含
__iter__和__next__()方法,通過__iter__方法可以回傳迭代器物件本身的方法,__next__()方法會使cur指標始終指向當前位置,即回傳容器中的下一個值,如果容器中沒有更多元素了,則會拋出StopIteration例外, - 迭代器(iterator)也是可迭代的物件(iterable)
2. 迭代器型別
- Python中支持容器進行迭代,同時也提供迭代器協議支持用戶自定義類進行迭代
- 容器迭代器:
container.__iter__()方法實作容器物件迭代 - 迭代器協議:
__iter__()方法和__next__()方法 __iter__():回傳迭代器本身,容器可以與for...in結合使用__next__():回傳迭代器回傳下一項
3. 迭代器分類
容器迭代器
data = https://www.cnblogs.com/liuliumei/archive/2023/01/06/[1,2,3,4] it = iter(data) print(next(it)) print(next(it))
- Python中提供的內置容器有:list、tuple、dictionary 和 set都是可迭代物件
- 呼叫iter()方法獲取對應的迭代物件
- 呼叫next()方法獲取迭代物件下一項值,每一次呼叫next之后,會自動往后移到到一位,獲取后面一位的資料,
遍歷迭代器
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次,超出范圍觸發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 ...
- 創建的物件/類需要實作
__iter__()和__next__()兩個方法即可作為迭代器 - 迭代器中__iter__()回傳迭代器本身方法
- 迭代器中__next__()方法允許進行其他操作,但是必須回傳迭代器的下一項
- 為了防止迭代永遠進行下去,Python提供stopIterator陳述句,終止迭代
總結
Python Iterator迭代器由__iter__()方法和__next__()方法組成,迭代器分為Iterator和iteratable兩種,因此迭代器本身也是可迭代物件的,
迭代器分為容器迭代和自定義迭代,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541336.html
標籤:其他
