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
个数。
初始化变量:
-
初始化两个变量
a
和b
,分别表示斐波那契数列的前两个数(0
和1
)。 -
初始化计数器
count
,用于跟踪生成的斐波那契数的数量。
生成斐波那契数:
-
使用
while count < n
循环,直到生成了n
个斐波那契数。 -
在每次循环中,使用
yield a
生成当前的斐波那契数。 -
更新变量
a
和b
,使其分别变为下一个斐波那契数。 -
增加计数器
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)