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
广告