Iterable是可迭代對(duì)象,Iterator是迭代器。
如果一個(gè)數(shù)據(jù)類型可以直接用for循環(huán)遍歷,那么它是Iterable
如果一個(gè)數(shù)據(jù)類型可以調(diào)用next()函數(shù)遍歷,那么它是Iterator。Iterator相當(dāng)于一個(gè)惰性的數(shù)據(jù)流,每次調(diào)用next()時(shí)才計(jì)算下一個(gè)值。這種按需計(jì)算并生成元素的方法能夠減少內(nèi)存的占用。
由此可見(jiàn)dict類型是Iterable,不是Iterator。list、str也不是Iterator。
對(duì)于非Iterator的數(shù)據(jù)類型,可以使用iter()函數(shù)將其轉(zhuǎn)換為Iterator
查看一個(gè)數(shù)據(jù)類型是不是Iterable或Iterator,可以:
from collections.abc import Iterator, Iterable
print(isinstance(#datatype, Iterator))
print(isinstance(#datatype, Iterable))
應(yīng)用:可以利用Iterator構(gòu)造全體素?cái)?shù)、全體自然數(shù)這種集合,因?yàn)槭嵌栊詷?gòu)造,不會(huì)占用很大內(nèi)存。