导入
什么是迭代器?
了解 Python 中的迭代器,并掌握其工作原理。
你应该熟悉 Python 中的序列。序列是一种有序的元素集合,最常见的类型包括 列表、字符串和元组。但序列依赖于一些底层的数据类型,这些类型在函数式编程中非常重要:迭代器 和 可迭代对象。
迭代器
在 Python 中,迭代器 是一种可用于逐个遍历一系列值的对象。具体来说,可以将迭代器传递给内置函数 next,以获取序列中的下一个值。
在前一章 闭包 中,我们使用 map 将 round 函数应用到列表中的每一个元素,代码如下:
1a = [2.2, 5.6, 1.9, 0.1] 2b = map(round, a) 3 4print(b) 5# print(list(b))
如果我们打印 b 的值,会发现它并不是一个 列表,而是一个 map 对象。
map 对象可以作为可迭代对象使用(即可以传递给 next 函数),因此我们可以这样来输出它的值:
1a = [2.2, 5.6, 1.9, 0.1] 2b = map(round, a) 3 4print(next(b)) # 2 5print(next(b)) # 6 6print(next(b)) # 2 7print(next(b)) # 0 8print(next(b)) # 抛出 StopIteration 异常
前四次调用会依次输出 a 中各元素四舍五入后的值。当第五次调用 next(b) 时,迭代器已无更多值可返回,此时会抛出 StopIteration 异常。这并非错误,而是迭代器表示自身已无剩余值的标准方式。
这说明了迭代器的一个重要特性:你只能使用一次。每次调用 next 都会获取下一个值,但无法回到起始位置,因此它是一次性使用的。