Python 中 Iterator和Iterable的區別

Python中 list,truple,str,dict這些均可以被迭代,但他們並非迭代器。爲何?函數

由於和迭代器相比有一個很大的不一樣,list/truple/map/dict這些數據的大小是肯定的,也就是說有多少事可知的。但迭代器不是,迭代器不知道要執行多少次,因此能夠理解爲不知道有多少個元素,每調用一次next(),就會往下走一步,是惰性的。spa

 

判斷是否是能夠迭代,用Iterablecode

 

1 from collections import Iterable
2 isinstance({}, Iterable) --> True
3 isinstance((), Iterable) --> True
4 isinstance(100, Iterable) --> False

 

判斷是否是迭代器,用Iterator對象

1  from collections import Iterator  
2  isinstance({}, Iterator)  --> False  
3  isinstance((), Iterator) --> False  
4  isinstance( (x for x in range(10)), Iterator)  --> True  

因此,blog

凡是能夠for循環的,都是Iterableit

凡是能夠next()的,都是Iteratorio

集合數據類型如list,truple,dict,str,都是Itrable不是Iterator,但能夠經過iter()函數得到一個Iterator對象for循環

Python中的for循環就是經過next實現的class

1 for x in [1,2,3,4,5]:  
2     pass  

等價於import

1 #先獲取iterator對象  
2 it = iter([1,2,3,4,5])  
3 while True:  
4     try:  
5         #獲取下一個值  
6         x = next(it);  
7     except StopIteration:  
8         # 遇到StopIteration就退出循環  
9         break  
相關文章
相關標籤/搜索