生成器函数 是一种特殊的函数,它使用 yield 关键字而不是 return 关键字来返回值。生成器函数返回一个特殊的迭代器,称为生成器。你可以使用 next() 函数来获取生成器的下一个值。
生成器函数的一个关键特性是它们只在需要产生下一个值时运行。这使得它们非常适合处理大数据集,因为它们不需要在内存中存储所有的值。
例如,以下是一个简单的生成器函数,它生成前 n 个整数:
def generate_integers(n):
i = 0
while i < n:
yield i
i += 1
你可以像这样使用这个生成器函数:
gen = generate_integers(5)
print(next(gen)) # 输出: 0
print(next(gen)) # 输出: 1
# ...等等,直到耗尽生成器
yield、return 与生命周期
生成器函数调用时产生生成器对象,函数体在迭代推进时执行;yield 暂停并保留状态,后续恢复,而 return 在生成器中用于结束执行并可携带完成值。因此,“用 yield 而不是 return”应理解为产生元素的方式,不是生成器内不能写 return。
惰性产生元素可以降低一次性保存全部结果的需求,但若函数内部先构建完整列表,或调用方把结果全部收集起来,仍会占用相应内存。持有文件等资源的生成器也需要明确关闭与清理;仅创建生成器并不意味着资源管理问题已被解决。