Python 可迭代对象和迭代器之间的区别
programmingpythonserver side programming
什么是可迭代对象?
可迭代对象可以大致定义为在传递给内置方法 iter() 时会生成迭代器的对象。要使对象可迭代,有几个条件,该类的对象需要定义两个实例方法:__len__ 和 __getitem__。当传递给方法 iter() 时,满足这些条件的对象将生成迭代器。
迭代器
迭代器被定义为通过内部状态变量计算迭代次数的对象。在这种情况下,当迭代越过最后一个项时,变量不会设置为零,而是会引发 StopIteration() 以指示迭代结束。
Iterable 与 Iterators
让我们看一个例子来检查 Iterable 和 Iterators 之间的区别 -
基本 | Iterable | Iterator |
---|---|---|
什么? | 要迭代的对象是 Iterable。 | 迭代器被定义为通过内部状态计算迭代的对象变量。 |
关系 | 每个迭代器都是可迭代的。 | 并非每个可迭代对象都是迭代器。 |
迭代方法 | 传递给内置方法 iter() 时会生成迭代器的对象。 | next() 用于迭代。 |
List | List 是可迭代的。 | List 不是迭代器。 |
示例
在下面的例子中,我们有一个 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