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

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程