python入门之迭代器
迭代器
已知,可以直接作用于for循環的數據類型有:
一類是集合數據類型,如list、tuple、dict、set、str
一類是generator,包括生成器和帶yield的generator function
這些可以直接作用于for循環的對象統稱為可迭代對象:Iterable
?判斷是否為可迭代對象:
>>> from collections import Iterable >>> isinstance([],Iterable) True >>> isinstance({},Iterable) True >>> isinstance('abc',Iterable) True >>> isinstance(x*2 for x in range(10),Iterable) True >>> isinstance(100,Iterable) False? 可以被next()函數調用并不斷返回下一個值的對象稱為迭代器:Iterator
判斷是否為迭代器:
>>> from collections import Iterator >>> isinstance([],Iterator) False >>> isinstance({},Iterator) False >>> isinstance('abc',Iterator) False >>> isinstance((x*2 for x in range(10)),Iterator) True >>> isinstance(100,Iterator) False?
使用iter()函數可將list、dict、str等Iterable變成Iterator
為什么list、dict、str等數據類型不是Iterator?
因為python的Iterator對象表示的是一個數據流,Iterator對象可以被next()函數調用并不斷返回下一個數據,直到沒有數據時拋出StopIteration錯誤,可以把這個數據流看作是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,所以Iterator的計算是惰性的,只有在需要返回下一個數據時它才會計算。
Iterator可以表示一個無限大的數據流,例如全體自然數,而使用list是永遠不可能存儲全體自然數的。
?
另外:
python的for循環本質上就是通過不斷調用next()函數實現的,例如:
for x in [1,2,3,4,5]:
pass
實際上完全等價于:
#首先獲得Iterator對象: it = iter([1,2,3,4,5]) #循環: while True:try:#獲得下一個值x = next(it)except stopIteration:#遇到stopiteration就退出循環break?
轉載于:https://www.cnblogs.com/chy-op/p/10179638.html
總結
以上是生活随笔為你收集整理的python入门之迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: private MyAddin(Syst
- 下一篇: docker images 详解