Python 迭代器(Iterators)

更新于 2026-01-11

迭代器是一种用于遍历集合(如列表、元组等)的方法。通过使用迭代器方法,我们可以循环访问一个对象并返回其元素。

从技术上讲,一个 Python 迭代器对象必须实现两个特殊方法:__iter__()__next__(),这两个方法合称为迭代器协议

通过迭代器进行遍历

在 Python 中,我们可以使用 next() 函数来返回序列中的下一个元素。

来看一个例子:

# 定义一个列表
my_list = [4, 7, 0]

# 从列表创建一个迭代器
iterator = iter(my_list)

# 获取迭代器的第一个元素
print(next(iterator))  # 输出 4

# 获取迭代器的第二个元素
print(next(iterator))  # 输出 7

# 获取迭代器的第三个元素
print(next(iterator))  # 输出 0

运行结果:

4
7
0

在这里,我们首先使用 iter() 方法从列表创建了一个迭代器,然后使用 next() 函数按顺序获取迭代器中的元素。

当我们到达末尾、没有更多数据可返回时,会抛出 StopIteration 异常。

使用 for 循环

更优雅且自动化的遍历方式是使用 for 循环。例如:

# 定义一个列表
my_list = [4, 7, 0]

for element in my_list:
    print(element)

运行结果:

4
7
0

for 循环对迭代器的工作原理

Python 中的 for 循环用于遍历一系列元素,比如列表、元组或字符串。

当我们对一个迭代器使用 for 循环时,循环会自动遍历迭代器中的元素,直到迭代器耗尽为止。

下面是一个 for 循环与迭代器配合使用的示例:

# 创建一个整数列表
my_list = [1, 2, 3, 4, 5]

# 从列表创建一个迭代器
iterator = iter(my_list)

# 遍历迭代器中的元素
for element in iterator:
    # 打印每个元素
    print(element)

在这个例子中,for 循环会遍历迭代器对象中的元素。

在每次迭代中,循环将下一个元素的值赋给变量 element,然后执行缩进的代码块。

该过程将持续进行,直到迭代器耗尽,此时 for 循环终止。

构建自定义迭代器

在 Python 中从头开始构建一个迭代器非常简单,只需实现 __iter__()__next__() 方法即可:

  • __iter__() 返回迭代器对象本身。如有需要,可以在此方法中执行一些初始化操作。
  • __next__() 必须返回序列中的下一个元素。当到达末尾并在后续调用中,必须抛出 StopIteration 异常。

下面是一个示例,它在每次迭代中返回 2 的下一个幂次方,幂指数从 0 开始,直到用户设定的最大值:

class PowTwo:
    """用于实现 2 的幂次方的迭代器类"""

    def __init__(self, max=0):
        self.max = max

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n <= self.max:
            result = 2 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration


# 创建一个对象
numbers = PowTwo(3)

# 从对象创建一个可迭代对象
i = iter(numbers)

# 使用 next() 获取下一个迭代器元素
print(next(i))  # 输出 1
print(next(i))  # 输出 2
print(next(i))  # 输出 4
print(next(i))  # 输出 8
print(next(i))  # 抛出 StopIteration 异常

运行结果:

1
2
4
8
Traceback (most recent call last):
  File "<string>", line 32, in <module>
File "<string>", line 18, in __next__
StopIteration

我们也可以使用 for 循环来遍历我们的自定义迭代器类:

for i in PowTwo(3):
    print(i)

运行结果:

1
2
4
8

若想了解更多关于面向对象编程的内容,请参阅 Python 面向对象编程(OOP)

Python 无限迭代器

无限迭代器是指永远不会结束的迭代器,也就是说它会无限地生成元素。

下面是一个使用 itertools 模块中的 count() 函数创建无限迭代器的例子:

from itertools import count

# 创建一个从 1 开始、每次递增 1 的无限迭代器
infinite_iterator = count(1)

# 打印该无限迭代器的前 5 个元素
for i in range(5):
    print(next(infinite_iterator))

运行结果:

1
2
3
4
5

这里我们创建了一个从 1 开始、每次加 1 的无限迭代器,并使用 for 循环和 next() 方法打印了它的前 5 个元素。