Python中的生成器(Generator)是一种特殊的迭代器,它允许你创建一个包含大量数据项的序列,而不需要一次性将所有数据加载到内存中。生成器的核心特点是惰性求值(lazy evaluation),即在需要时才产生下一个值,这对于处理大数据集或无限序列非常有用。生成器主要有两种定义方式:
使用函数定义:通过在函数中使用
yield
关键字,该函数就变成了一个生成器函数。当调用这个函数时,它返回一个生成器对象,而不是直接执行函数并返回结果。每次迭代时,会从上次停止的地方(yield
语句)继续执行,直到遇到下一个yield
或函数结束。def simple_generator(): yield 1 yield 2 yield 3 gen = simple_generator() print(next(gen)) # 输出 1 print(next(gen)) # 输出 2 print(next(gen)) # 输出 3
使用生成器表达式:类似于列表推导式,但使用圆括号而非方括号包围,这样创建的表达式会返回一个生成器对象。
gen_exp = (x * x for x in range(5)) for num in gen_exp: print(num) # 输出 0, 1, 4, 9, 16
生成器的主要优点包括:
- 节省内存:特别是在处理大量数据时,因为它们不一次性生成所有元素,而是按需产生。
- 实现了惰性计算:只在需要时计算下一个值,这对于无限序列特别有用。
- 可用于创建高效的循环和数据处理流程,如处理文件读取、网络数据流等。
记住,生成器一旦遍历完成或被显式关闭后,就不能再次使用。如果需要重新遍历生成器产生的序列,需要重新创建生成器对象。