Python教程22:生成器(Generator)

Python教程22:生成器(Generator) “按需而生,用时即弃。” 生成器是Python中一个强大但常被忽视的特性。它能让你处理超大数据集而不耗尽内存,今天我们深入学习生成器的原理和应用。 1. 什么是生成器 问题场景 假设要生成1亿个数字: 1# 方法1:列表(占用大量内存) 2numbers = [i for i in range(100000000)] 3# 内存占用:约800MB! 4 5# 方法2:生成器(几乎不占内存) 6numbers = (i for i in range(100000000)) 7# 内存占用:几百字节 生成器(Generator): 一种特殊的迭代器 惰性求值:需要时才计算,不提前生成所有值 内存高效:一次只保存一个值 使用yield关键字或生成器表达式创建 为什么需要生成器: 处理大数据集(GB/TB级别) 无限序列(斐波那契数列、素数序列) 管道式数据处理 节省内存 2. 生成器函数 使用yield 普通函数用return返回值,生成器函数用yield: 1def simple_generator(): 2 """ 3 生成器函数示例 4 - yield关键字使函数变成生成器 5 - 每次yield都会"暂停"函数,保存状态 6 - 下次调用时从暂停处继续 7 """ 8 print("开始") 9 yield 1 10 print("继续") 11 yield 2 12 print("再继续") 13 yield 3 14 print("结束") 15 16# 创建生成器对象(还没执行函数体) 17gen = simple_generator() 18print(type(gen)) # <class 'generator'> 19 20# 每次调用next()执行到下一个yield 21print(next(gen)) # 输出:开始 1 22print(next(gen)) # 输出:继续 2 23print(next(gen)) # 输出:再继续 3 24# print(next(gen)) # StopIteration异常 yield的执行流程: ...

2024-10-14 · 4 min · 767 words · 老墨