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

相关文章