什么是迭代器和生成器

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

相关推荐
石榴树下的七彩鱼13 分钟前
图片去水印 API 详解:从单图到批量自动化去水印(附 Python/JS/PHP 完整教程)
python·自动化·图片处理·图片去水印·石榴智能·api教程
Li emily6 小时前
解决了加密货币api多币种订阅时的数据乱序问题
人工智能·python·api·fastapi
2301_781571427 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
asdzx677 小时前
使用 Python 为 PDF 添加页码 (详细教程)
python·pdf·页码
AI技术控7 小时前
《Transformers are Inherently Succinct》论文解读:从“能表达什么”到“多紧凑地表达”
人工智能·python·深度学习·机器学习·自然语言处理
金融大 k9 小时前
Python 全球指数监控面板:TickDB + REST + WebSocket 完整方案
python·websocket
啊哈哈121389 小时前
系统设计复盘:为什么 Agent 的 ReAct 循环必须内嵌确定性保护层——以 FitMind 健康助手的路由与步骤控制为例
人工智能·python·react
一颗牙牙10 小时前
安装mmcv
开发语言·python·深度学习
大数据魔法师11 小时前
Streamlit(二)- Streamlit 架构与运行机制
python·web
m0_4708576411 小时前
PHP怎么实现工厂模式_Factory模式编写指南【指南】
jvm·数据库·python