Python 中 Iterator和Iterable的區別


(轉載:http://blog.csdn.net/passionkk/article/details/49929887)

Python中 list,truple,str,dict這些都可以被迭代,但他們並不是迭代器。為什么?

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

 

判斷是不是可以迭代,用Iterable


 from collections import Iterable  

isinstance({}, Iterable) --> True  

isinstance((), Iterable) --> True  

isinstance(100, Iterable) --> False  

 

 

判斷是不是迭代器,用Iterator

 


  from collections import Iterator  

isinstance({}, Iterator)  --> False  

isinstance((), Iterator) --> False  

isinstance( (x for x in range(10)), Iterator)  --> True  


所以,

 

凡是可以for循環的,都是Iterable

凡是可以next()的,都是Iterator

集合數據類型如list,truple,dict,str,都是Itrable不是Iterator,但可以通過iter()函數獲得一個Iterator對象

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM