06-生成器案例:斐波那契数列
目标¶
- 知道通过 yield 关键字可以创建生成器
1. 斐波那契数列¶
generator非常强大。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以用函数来实现。
我们仍然用上一节提到的斐波那契数列来举例,回想我们在上一节用迭代器的实现方式:
def fibonacci(n):
# 定义斐波那契数列的前2个值
a = 1
b = 1
# 定义当前的位置
current_index = 0
print("------------1111-----------")
while current_index < n:
# 定义要返回的值
result = a
# 生成新的 a、b值
a, b = b, a+b
# 让当前值+1
current_index += 1
print("-----------2222----------")
yield result
print("-----------3333------------")
# 生成器,生成斐波那契数列
fib = fibonacci(5)
value = next(fib)
print(value)
value = next(fib)
print(value)
------------1111-----------
-----------2222----------
1
-----------3333------------
-----------2222----------
1
Process finished with exit code 0
2. yield关键字¶
-
使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)
-
yield关键字有两点作用:
保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起
将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用