什么是迭代器和生成器

一、什么是迭代器(Iterator)?

一句话解释

迭代器是一个可以被逐个取值的对象,它实现了 __iter__() __next__()方法。

你可以把迭代器理解成:

一个"能记住当前位置"的取值器,每次取一个值,取完自动往后移动。

迭代器的两个核心方法

方法 作用
__iter__() 返回迭代器本身
__next__() 返回下一个值,没值时抛出 StopIteration

为什么需要迭代器?

  • 节省内存(不一次性加载全部数据)

  • 支持 for 循环

  • 支持惰性计算(需要时才取值)

比如读取大文件、处理大数据流时非常有用。

迭代器示例

复制代码
lst = [1, 2, 3]
it = iter(lst)

print(next(it))  # 1
print(next(it))  # 2
print(next(it))  # 3

二、什么是生成器(Generator)?

一句话解释

生成器是一种特殊的迭代器,用 yield关键字生成数据,边计算边返回,特别省内存。

生成器本质上就是:

自动帮你写好 __iter__() __next__()的迭代器。

生成器的特点

  • yield 生成数据

  • 惰性计算(需要时才算)

  • 非常省内存

  • 适合大数据处理

生成器示例

复制代码
def gen():
    yield 1
    yield 2
    yield 3

g = gen()
print(next(g))  # 1
print(next(g))  # 2
print(next(g))  # 3

三、迭代器 vs 生成器

对比项 迭代器 生成器
定义方式 实现 __iter__ + __next__ 使用 yield
写法 复杂 简单
内存占用 更低
是否惰性
是否自动实现迭代协议

你可以这样总结:

生成器是迭代器的语法糖,用起来更简单、更省内存。

四、为什么生成器特别重要?

你可以在面试里这样说:

生成器适合处理大数据,比如大文件读取、日志流式处理、网络数据流,因为它不会一次性把数据加载到内存,而是按需生成。

这句话非常加分。

五、结合你的项目经验

你在 AIGC 项目里做过流式输出(StreamingResponse),你可以这样回答:

FastAPI 的流式输出本质上就是一个生成器,每次 yield 一段内容,让前端实时收到数据。

这会让面试官觉得你不仅懂概念,还懂实战。

六、最终总结

迭代器是实现了 __iter__() __next__()的对象,用来逐个取值; 生成器是用 yield写的特殊迭代器,支持惰性计算,更省内存,适合大数据处理。

相关推荐
STLearner几秒前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空(交通)预测,轨迹数据挖掘(表示,生成)
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
axinawang9 分钟前
ddddocr--识别验证码
python
2601_9621803310 分钟前
python——Django 框架
开发语言·python·django
长江后浪博客11 分钟前
Conda环境下测试Intel NPU:Python版本如何选择?
开发语言·python·conda·openvino·intel npu
陈年老古董34 分钟前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
always_TT35 分钟前
【Python 字符串格式化:format() 方法】
android·开发语言·python
小义_39 分钟前
JDK 深度解析
java·linux·开发语言·python·面试
SendTomo43 分钟前
send.wang:基于浏览器WebRTC实现无客户端文件互传
网络·python·网络协议·webrtc·p2p
whcyhhh1 小时前
头歌实践教学平台:大数据存储2023(十四下答案)
大数据·数据库·python
Capricorn19881 小时前
Ox Alpha 1M 上下文科研引用失真怎么排查?知芽 Notebook Skill 技术链路实操
人工智能·笔记·python·深度学习·知识图谱·论文笔记