可作用于for循环的类型一:
list tuple dict set str
还有数据结构generator 统称为:Iterable
可以使用isinstance()判断一个对象是否为Iterable对象
>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance((),Iterable)
True
>>> isinstance(([]),Iterable)
True
>>> isinstance(100,Iterable)
False
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator(不一定是生成器,但生成器一定是迭代器)
可以通过dir命令,查看对象是否具有__next__
>>> from collections import Iterator
>>> isinstance((x for i in range(5)),Iterator)
True
>>> isinstance([],Iterator)
False
可以把list dict str 等Iterable 变成 Iterator 通过使用iter()函数(内置函数):
>>> a=[1,2,3]
>>> iter(a)
<list_iterator object at 0x000001BD7DECAA90>
>>> b=iter(a)
>>> b.__next__()
1
>>> b.__next__()
2
因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用不断返回下一个数据,直到没有数据时,抛出StopIteration错误,可以把这个数据流看作是一个有序序列,但我们不能提前知道序列的长度,只能next()实现按需求计算下一个,所以Iterator 的计算是惰性的。
for循环的本质上就是利用next()实现的
文件对象的循环for line in f: 也是如此