025. 创建一个生成器函数,生成斐波那契数列的前20个数

在 Python 中,可以使用生成器函数来生成斐波那契数列。生成器函数通过 yield 语句逐个返回值,而不是一次性返回所有值,这使得生成器在处理大数据集时非常高效。以下是一个生成斐波那契数列的生成器函数的示例代码,该函数生成前 20 个斐波那契数。

示例代码

# 定义一个生成器函数,生成斐波那契数列的前 n 个数
def fibonacci(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield a  # 生成当前的斐波那契数
        a, b = b, a + b  # 更新斐波那契数列的值
        count += 1

# 使用生成器函数生成前 20 个斐波那契数
fib_sequence = fibonacci(20)

# 打印生成的斐波那契数列
print("前 20 个斐波那契数:")
for num in fib_sequence:
    print(num, end=" ")

运行结果

运行上述代码后,输出如下:

前 20 个斐波那契数:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

代码解释

定义生成器函数

  • 使用 def fibonacci(n) 定义一个生成器函数,接受一个参数 n,表示生成斐波那契数列的前 n 个数。

初始化变量

  • 初始化两个变量 ab,分别表示斐波那契数列的前两个数(01)。

  • 初始化计数器 count,用于跟踪生成的斐波那契数的数量。

生成斐波那契数

  • 使用 while count < n 循环,直到生成了 n 个斐波那契数。

  • 在每次循环中,使用 yield a 生成当前的斐波那契数。

  • 更新变量 ab,使其分别变为下一个斐波那契数。

  • 增加计数器 count

使用生成器

  • 调用生成器函数 fibonacci(20),生成前 20 个斐波那契数。

  • 使用 for 循环遍历生成器返回的值,并打印每个斐波那契数。

扩展:生成无限斐波那契数列

如果需要生成无限的斐波那契数列,可以去掉生成器函数中的计数器和终止条件:

# 定义一个生成器函数,生成无限的斐波那契数列
def fibonacci_infinite():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 使用生成器函数生成无限的斐波那契数列
fib_sequence = fibonacci_infinite()

# 打印前 20 个斐波那契数
print("前 20 个斐波那契数:")
for _ in range(20):
    print(next(fib_sequence), end=" ")

运行结果

运行上述代码后,输出如下:

前 20 个斐波那契数:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

注意事项

生成器的效率

  • 生成器逐个生成值,而不是一次性生成所有值,因此在处理大数据集时非常节省内存。

无限生成器

  • 无限生成器会一直生成值,直到显式停止。在实际使用中,通常会结合 for 循环或 next() 函数来获取有限数量的值。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)