1. 什麼是迭代器? 迭代器是一個表示數據流的對象,當我們調用next()方法時會返回容器中的下一個值 迭代器中包含__iter__和__next__()方法。通過__iter__方法可以返回迭代器對象本身的方法。__next__()方法會使cur指針始終指向當前位置,即返回容器中的下一個值,如果容 ...
1. 什麼是迭代器?
- 迭代器是一個表示數據流的對象,當我們調用next()方法時會返回容器中的下一個值
- 迭代器中包含
__iter__
和__next__()
方法。通過__iter__
方法可以返回迭代器對象本身的方法。__next__()
方法會使cur指針始終指向當前位置,即返回容器中的下一個值,如果容器中沒有更多元素了,則會拋出StopIteration異常。 - 迭代器(iterator)也是可迭代的對象(iterable)
2. 迭代器類型
- Python中支持容器進行迭代,同時也提供迭代器協議支持用戶自定義類進行迭代
- 容器迭代器:
container.__iter__()
方法實現容器對象迭代 - 迭代器協議:
__iter__()
方法和__next__()
方法 __iter__()
:返回迭代器本身,容器可以與for...in結合使用__next__()
:返回迭代器返回下一項
3. 迭代器分類
容器迭代器
data = [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兩種,因此迭代器本身也是可迭代對象的。
迭代器分為容器迭代和自定義迭代。