生成器

分为两种: 生成器函数和生成器表达式

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)生成器表达式每次都输出一个结果,列表推导式一次性输出所有值

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务