logo
57

迭代器

⏱️ 25分钟

迭代器(Iterators):理解 for 循环底层机制

你现在可能会困惑什么

“为什么还要学 iterator,for 不是能直接用吗?”

for 底层就是不断调用 iterator 的 next();理解后更容易 debug 与扩展。

一句话定义

迭代器是实现 __next__() 的对象,逐个返回元素直到 StopIteration

生活类比

iterable 像一本书,iterator 像翻页动作。

最小可运行例子

nums = [10, 20, 30]
it = iter(nums)
print(next(it))
print(next(it))
print(next(it))

课堂小测(5 分钟)

  1. 手写 iter()+next() 遍历字符串。
  2. 写一个 Counter 迭代器。
  3. 加入 step 参数。

课堂小测参考答案与判分点

  • 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
  • 判分点 1(正确性):主流程结果正确,关键分支可执行。
  • 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
  • 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。

迁移任务(课后)

实现 RangeLike(start, end, step) 自定义 iterator。

本节验收标准

你能独立做到:

  • 区分 iterable 与 iterator
  • 手动消费 iterator
  • 写最小自定义迭代器

常见报错与调试步骤(新手版)

  • 报错看不懂:先读最后一行错误类型(如 TypeErrorNameError),再回到对应代码行定位。
  • 不确定变量值:在关键位置临时 print(变量, type(变量)),先确认数据是否符合预期。
  • 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。

常见误区

  • 误区:iterable 和 iterator 是同一概念。
  • 正解:iterable 产出 iterator,iterator 逐个给值。