Python怎么生成迭代器_iter与next方法原理解释与自定义

张开发
2026/4/11 0:18:34 15 分钟阅读

分享文章

Python怎么生成迭代器_iter与next方法原理解释与自定义
__iter__ 必须返回带__next__的对象因迭代器协议要求分离可迭代对象与迭代器直接返回值会触发TypeError。为什么 __iter__ 必须返回一个带 __next__ 的对象而不是直接返回值因为迭代器协议要求分离「可迭代对象」和「迭代器本身」。调用 iter(obj) 时__iter__ 被触发它必须返回一个新对象通常是自身或新实例这个对象要能响应 next() —— 即实现 __next__。如果 __iter__ 直接 return 42 或 yield 一个值for 循环会报 TypeError: iter() returned non-iterator。常见错误现象TypeError: int object is not iterable 或更具体的 TypeError: iter() returned non-iterator of type XXX往往就是 __iter__ 返回了非迭代器类型。__iter__ 的职责是“提供一个迭代器”不是“开始迭代”多数情况下返回 self 是最简方案但前提是类自己实现了 __next__若想支持多次独立遍历比如多次 for 循环__iter__ 应返回新实例而非 self自定义迭代器时__next__ 抛 StopIteration 的时机怎么把握必须在「无更多数据可返回」的瞬间抛出不能早、不能晚。早了比如第一次就抛会导致循环一次都不执行晚了比如已越界还返回旧值会无限循环或返回脏数据。使用场景遍历列表、文件行、生成有限序列如斐波那契前 N 项都依赖这个边界判断。立即学习“Python免费学习笔记深入”典型模式用索引或状态变量跟踪进度每次 __next__ 先检查是否越界再取值最后更新状态切忌在 __next__ 开头就 raise StopIteration —— 那等于拒绝所有迭代不要用 return None 代替 raise StopIterationPython 迭代器协议不认 None 为结束信号示例安全写法 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章