python中list, str,truple, dict都是可以被迭代的,但他们不是迭代器。why?
list/truple/map/dict这些数据的大小是确定的,我们可以准确知道他们的size。
迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。
判断是不是可以迭代,用Iterable
from collectionsimport Iterable
isinstance({}, Iterable) -->True
isinstance((), Iterable) -->True
isinstance(100, Iterable) -->False
凡是可以for循环的都是Iterable
判断是不是迭代器,用Iterator
isinstance({}, Iterator) -->False
isinstance((), Iterator) -->False
isinstance( (xfor xin range(10)), Iterator) -->True
凡是可以.(next)的,都是Iterator.
备注:
集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象
Python中的for循环就是通过next实现的
参考资料:https://www.jianshu.com/p/c523b4a8be6c