什么是迭代器和生成器

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

相关推荐
荣码6 分钟前
从0到1搭一个生产级RAG系统:串联前面21篇所有知识
java·python
小师兄吃牛肉1 小时前
Java语法 | 多重循环
java·开发语言·python
明如正午1 小时前
用 Python 一键把 ASC 文件转成 BLF(基于 python-can)
python·can·blf·asc
leisoo80972 小时前
融资融券数据怎么查两融指标含义与杠杆观察方法 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
Patrick在香港2 小时前
同一份脚本,mac 正常 Windows 乱码:open() 默认编码实测(附 3.15 终局)
utf-8·windows·python·macos·跨平台·编码·标准库
勿信日志3 小时前
Playwright 元素定位:一个 width>50 过滤器把 42px 的输入框删掉了
python
larance3 小时前
[菜鸟教程] 机器学习教程十课-Python 机器学习应用
人工智能·python·机器学习
栖凤3 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
Yyyyyy~3 小时前
【python】函数
python
金銀銅鐵3 小时前
[Java] 借助GUI展示class文件的版本号
后端·python·ai编程