python-叠代器
在介紹叠代器之前,先說明下叠代的概念:
叠代:通過for循環遍歷對象的每一個元素的過程。
Python的for語法功能非常強大,可以遍歷任何可叠代的對象。
在Python中,list/tuple/string/dict/set/bytes都是可以叠代的數據類型。
可以通過collections模塊的Iterable類型來判斷一個對象是否可叠代:
from collections import Iterable print(isinstance(‘abcd‘, Iterable)) print(isinstance([1, 2, 3], Iterable)) print(isinstance(123, Iterable))
結果:
True
True
False
叠代器
叠代器是一種可以被遍歷的對象,並且能作用於next()函數。叠代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。叠代器只能往後遍歷不能回溯,不像列表,你隨時可以取後面的數據,也可以返回頭取前面的數據。叠代器通常要實現兩個基本的方法:iter()
和 next()
。
字符串,列表或元組對象,甚至自定義對象都可用於創建叠代器:
lis = [1, 2, 3, 4] it = iter(lis) #使用python內置的iter()方法創建叠代器對象 print(next(it)) print(next(it)) print(next(it))print(next(it)) #print(next(it)) #當後面沒有元素可以next的時候,彈出錯誤
結果:
1
2
3
4
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\test_r.py", line 89, in <module>
print(next(it)) #當後面沒有元素可以next的時候,彈出錯誤
StopIteration
或者使用for循環遍歷叠代器:
lis1 = [1, 2, 3, 4] it1 = iter(lis1) #創建叠代器對象 fori in it1: print(i,end=" ")
結果:
1 2 3 4
很多時候,為了讓我們自己寫的類成為一個叠代器,需要在類裏實現__iter()__
和__next()__
方法。
總結:Python的叠代器表示的是一個元素流,可以被next()函數調用並不斷返回下一個元素,直到沒有元素時拋出StopIteration錯誤。可以把這個元素流看做是一個有序序列,但卻不能提前知道序列的長度,只能不斷通過next()函數得到下一個元素,所以叠代器可以節省內存和空間。
叠代器(Iterator)和可叠代(Iterable)的區別:
-
凡是可作用於for循環的對象都是可叠代類型;
-
凡是可作用於next()函數的對象都是叠代器類型;
-
list、dict、str等是可叠代的但不是叠代器,因為next()函數無法調用它們。可以通過iter()函數將它們轉換成叠代器。
-
Python的for循環本質上就是通過不斷調用next()函數實現的。
python-叠代器