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