其他分享
首页 > 其他分享> > 迭代器

迭代器

作者:互联网

一个对象是仓库,也就是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