Python生成器的核心作用是按需生成数据,节省内存。它通过yield暂停执行并返回值,保留状态供下次继续,适合大数据流、无限序列等场景,比列表推导式更省内存且无需手动实现迭代器协议。

Python生成器的核心作用是**按需生成数据,节省内存**。它不一次性把所有结果存进内存,而是每次调用时才计算并返回一个值,特别适合处理大数据流、无限序列或资源受限的场景。
生成器比列表更省内存
比如要生成100万个数字的平方,用列表需要一次性分配内存存储全部结果:
squares_list = [x**2 for x in range(1000000)] # 占用数百MB内存而用生成器函数,只保存当前状态,几乎不占额外内存:
def squares_gen():for x in range(1000000):
yield x**2
gen = squares_gen() # 此时没算任何值,内存占用极小
- 调用 next(gen) 才算第一个数(0²=0)
- 再调用一次算第二个(1²=1),依此类推
- 中间状态(如当前 x 值)由 Python 自动保存在生成器对象中
yield 是暂停与交出控制权的关键
yield 不是 return:函数遇到 yield 会暂停执行,把值“交出来”,但保留全部局部变量和执行位置;下次继续从 yield 下一行开始。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~