什么是迭代器和生成器

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

相关推荐
悠闲蜗牛�2 小时前
深入浅出Spring Boot 3.x:新特性全解析与实战指南
开发语言·python
xinhuanjieyi2 小时前
python获取租房70页信息,为了安全隐去了真实网址
开发语言·python
gzroy3 小时前
量化金融实践-海龟交易法
python·金融
sg_knight3 小时前
适配器模式(Adapter)
python·设计模式·适配器模式·adapter
52Hz1183 小时前
力扣20.有效的括号、155.最小栈
python·算法·leetcode
小鸡吃米…4 小时前
TensorFlow 实现多层感知机学习
人工智能·python·tensorflow
WW、forever4 小时前
【服务器】上传服务器中数据至 FigShare(Python)
运维·服务器·python
宝贝儿好4 小时前
【强化学习】第十章:随机高斯策略
人工智能·python·深度学习·神经网络·机器人·自动驾驶