生成器推导式
1.语法格式
(experssion for item in iterable if condition)(与列表推导式相似)
· expression:对每个元素的操作表达式
· item:迭代变量
· iterable:可迭代对象(如列表、字符串等)
· if condition:可选的条件过滤
示例:
# 生成0-9的平方生成器
squares = (x**2 for x in range(10))
print(next(squares)) # 输出:0
print(next(squares)) # 输出:1
2.核心特点
· 惰性求值:生成器推导式不会立即生成所有元素,而是通过next()或循环逐个生成,节省内存
· 单次使用:生成器遍历后无法重复使用,需重新创建
· 高效性:适合处理大规模数据流
,避免一次性加载全部数据
对比列表推导式:
# 列表推导式(立即生成所有元素)
list_comp = [x**2 for x in range(1000000)] # 占用大量内存
# 生成器推导式(按需生成)
gen_comp = (x**2 for x in range(1000000)) # 内存友好
3. 注意事项
· 不可索引:生成器不支持下标访问
· 性能权衡:虽然节省内存,但频繁调用next()可能比列表推导式稍慢
如需复用生成器的数据,可转换为列表(但会失去惰性优势):
gen = (x for x in range(5))
list_from_gen = list(gen) # 转为列表:[0,1,2,3,4]