生成器是一种特殊的函数,它可以在迭代过程中逐步产生值,而不是一次性返回所有结果。生成器使用关键字yield来返回值,每次调用yield时,函数会暂停并保存当前的状态,等待下一次迭代时继续执行。生成器可以节省内存空间,提高效率,也可以与其他迭代工具无缝配合。
要创建一个生成器,有两种方法:
- 第一种方法是把一个列表生成式的[]改成(),就创建了一个生成器。例如:
g = (x * x for x in range(10)) # 创建一个生成器
for n in g: # 通过for循环迭代生成器
print(n) # 输出0, 1, 4, 9, ..., 81
- 第二种方法是在函数中使用yield语句来返回值。例如:
def fib(n): # 定义一个生成器函数
a, b = 0, 1 # 初始化变量
while a < n: # 循环条件
yield a # 返回当前值
a, b = b, a + b # 更新变量
for x in fib(100): # 通过for循环迭代生成器
print(x) # 输出斐波那契数列