跳到主要内容

高级特性:迭代器(Iteration)

🧩 为什么需要迭代?

在处理数据时,我们经常需要遍历某个序列,例如:

  • 逐行读取一个文件
  • 遍历列表中的每个元素
  • 遍历字典的键值对

Python 提供了简洁而强大的 for...in 语法来进行迭代,但你是否思考过:for 是如何知道一个对象能不能被“迭代”的?


🔄 可迭代对象(Iterable)

在 Python 中,只要可以被 for...in 使用的对象,都称为“可迭代对象”(Iterable),例如:

  • 字符串、列表、元组
  • 字典、集合
  • 文件对象
  • range() 等生成器

我们可以使用内置函数 iter() 检查一个对象是否是可迭代的。

collections.abc 导入 迭代协议

打印(实例类型([1, 2, 3], 迭代协议)) # True
打印(实例类型(123, 迭代协议)) # False

🔁 迭代的原理:for 背后发生了什么?

当你写下:

for x in [1, 2, 3]:
print(x)

其实 Python 在背后会自动执行如下逻辑:

it = 迭代器([1, 2, 3])   # 获取迭代器
判断循环 真:
尝试:
x = 下一个(it)
打印(x)
捕获 停止迭代:
终止

🧩 迭代器(Iterator)和可迭代对象的区别

名称描述
Iterable(可迭代对象)可以被 for...in 遍历的对象(如 list、dict)
Iterator(迭代器)可以用 next() 不断取出下一个元素的对象
关系Iterator 是一种特殊的 Iterable

你可以通过 iter() 把一个 Iterable 变成 Iterator,用 next() 取值。


📘 示例:手动遍历列表

lst = [10, 20, 30]
it = 迭代器(lst)

打印(下一个(it)) # 10
打印(下一个(it)) # 20
打印(下一个(it)) # 30
# 打印(下一个(it)) # StopIteration

🛠 自定义可迭代对象

你可以通过实现 __iter__()__next__() 方法来自定义一个可迭代对象。

倒计时:
__初始化__(self, 开始):
self.当前 = 开始

__迭代__(self):
返回 self

__下一个__(self):
如果 self.当前 <= 0:
异常 停止迭代
self.当前 -= 1
返回 self.当前 + 1

for i in 倒计时(3):
print(i) # 输出:3 2 1

✅ 总结

概念特征作用
Iterable可被 for 遍历的对象包含 __iter__() 方法
Iteratornext() 获取下一个值包含 __next__() 方法
for 语句会自动调用 iter()next()简化了迭代逻辑

下一章将介绍 生成器(Generator) —— 构建高效惰性序列的神器。

需要继续为你生成生成器章节吗?