什么是迭代器和生成器

一、什么是迭代器(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写的特殊迭代器,支持惰性计算,更省内存,适合大数据处理。

相关推荐
花酒锄作田12 小时前
Pydantic校验配置文件
python
hboot13 小时前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi1 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi1 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽1 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户8358086187911 天前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
Warson_L2 天前
Python `Annotated` 与 LangGraph Reducer 学习笔记
python
韩师傅2 天前
海天线算法的前世今生
python·计算机视觉
韩师傅2 天前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
Warson_L2 天前
LangGraph的MessageState and HumanMessage
python