生成器
分为两种: 生成器函数和生成器表达式
def count_down(n):
"""生成器函数示例"""
print("开始倒计时")
while n > 0:
yield n # 暂停并返回值
n -= 1
print("发射!")
# 使用生成器
gen = count_down(5)
print(next(gen)) # 输出: 开始倒计时 然后 5
print(next(gen)) # 输出: 4
print(next(gen)) # 输出: 3
# 可以继续 next(gen) 直到结束
生成器函数与普通函数的不同有以下几点:
1.生成器函数使用yield返回函数值,普通函数使用return返回函数值
2.生成器函数每次只能迭代一次,每次yield后会暂停,等待下一次调用,普通函数一次完成所有迭代次数。
生成器函数的优点:
- 内存效率:生成器一次只生成一个值,因此非常适合处理大量数据或无限序列。
- 惰性求值:值只有在需要时才生成,可以节省计算资源。
# 列表推导式 - 立即计算,占用内存 squares_list = [x**2 for x in range(1000000)] # 占用大量内存 # 生成器表达式 - 惰性计算,节省内存 squares_gen = (x**2 for x in range(1000000)) # 几乎不占内存 print(next(squares_gen)) # 0 print(next(squares_gen)) # 1 print(next(squares_gen)) # 4
生成器表达式和列表推导式的理解:
(1) 生成器表达式使用(),列表推导式使用[]
(2)生成器表达式每次都输出一个结果,列表推导式一次性输出所有值
查看15道真题和解析
