python--迭代器與生成器
阿新 • • 發佈:2018-12-20
寫在迭代器之前,假如我要迴圈遍歷一個列表並列印,for迴圈想必是再熟悉不過了
l = [1, 2, 3, 4]
for i in l:
print(i)
1
2
3
4
然而for迴圈為什麼能迴圈呢,他的內部是如何實現的呢?
迭代器
迭代 可迭代的(iterable) 迭代顧名思義,一個一個取出來(操作),迴圈,遍歷怎麼說都行。 那什麼是可迭代的?相信試過字串,列表,元組,字典,集合都可以被for迴圈,我們可以用isinstance()來判斷是否是可迭代的
from collections import Iterable print(isinstance('python', Iterable)) print(isinstance([1,2,3], Iterable)) print(isinstance({1:2,2:3}, Iterable)) print(isinstance((1,3,4,5), Iterable)) print(isinstance(100, Iterable))
True
True
True
True
False
事實確實如此,同時結果表明int型是不可迭代的。
迭代器遵循迭代器協議:必須擁有__iter__方法和__next__方法。 那怎麼用迭代器迭代呢
l = [1,2,3,4]
res = l.__iter__()
print(res.__next__()) # 從迭代器中取下一個值
print(res.__next__())
print(res.__next__())
1
2
3
__iter__方法返回一個迭代器,可以用__next__方法一個一個的取值,如果值取完了再繼續用__next__方法取值會StopIteration錯誤異常 而for迴圈取完停止,這裡沿用上面的程式碼
for i in res:
print(i)
1
2
3
4