Python可迭代对象和迭代器的区别


什么是可迭代对象?

可迭代对象可以粗略地定义为一个对象,当传递给内置方法iter()时,会生成一个迭代器。要成为可迭代对象,对象需要满足几个条件:该类的对象需要定义两个实例方法:__len__和__getitem__。满足这些条件的对象,当传递给iter()方法时,会生成一个迭代器。

迭代器

迭代器定义为一个通过内部状态变量计数迭代的对象。在这种情况下,当迭代越过最后一项时,变量不会设置为零,而是引发StopIteration()来指示迭代结束。

可迭代对象与迭代器

让我们来看一个例子,检查可迭代对象和迭代器之间的区别:

基础 可迭代对象 迭代器
什么? 可迭代的对象是可迭代对象。 迭代器定义为一个通过内部状态变量计数迭代的对象。
关系 每个迭代器都是可迭代的。 并非每个可迭代对象都是迭代器。
迭代方法 当传递给内置方法iter()时,会生成一个迭代器的对象。 使用next()进行迭代。
列表 列表是可迭代的。 列表不是迭代器。

例子

在下面的例子中,我们有一个Cars类,它既是可迭代的又是迭代器。Cars类是一个迭代器,因为它实现了:

  • __iter__ 方法返回对象本身;

  • __next__ 方法从列表中返回下一项。

Cars类也是可迭代的,因为它实现了:

  • __iter__ 方法返回对象本身,它是一个迭代器。

让我们看看这个例子:

class Cars: def __init__(self): self.rgb = ['bmw', 'audi', 'benz', 'tesla'] self.__index = 0 def __iter__(self): return self def __next__(self): if self.__index >= len(self.rgb): raise StopIteration # return the next car name car = self.rgb[self.__index] self.__index += 1 return car

更新于:2022年8月12日

729 次浏览

启动你的职业生涯

通过完成课程获得认证

开始
广告