迭代器
作者:互联网
一个对象是仓库,也就是iterable。
一个对象是仓管员,也就是iterator。
迭代器
可迭代对象(可用for循环的对象):
1.list tuple dict set str等几何数据类型。
2.generator生成器,或者包含yield的生成器函数
from collections.abc import Iterable # Iterable 可迭代的对象
isinstance([],Iterable) # True
迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象。生成器一定是迭代器对象
from collections.abc import Iterator # Iterator 迭代器
print(isinstance([],Iterator)) #False,虽然是可迭代对象,但不是迭代器
print(isinstance((x for x in range(100)),Iterator)) #True
print(isinstance([x for x in range(100)],Iterator)) #显然列表生成式不是迭代器
关于Iterator,可以代表一个无穷集合,不确定长度。而list等并不是不确定长度。
l = (x for x in range(100)) #所以生成器对象,并不是一个长度为100的数据类型
print(len(l)) # TypeError: object of type 'generator' has no len()
小结:
1.凡是可以for的,都是可迭代对象。Iterable
2.凡是可以调用next()函数的,都是迭代器对象。Iterator。表示一个惰性计算的序列
3.python的for循环本质,就是不断调用next()实现的
def ange_for(i):
it = iter(i) # iter(i) 根据i获得一个Iterator对象
while True:
try:
x = next(it)
except StopIteration:
break
标签:迭代,Iterator,对象,生成器,next,isinstance 来源: https://www.cnblogs.com/xinxuann/p/16179207.html