08-用生成器生成斐波那契数
1.1.6 用生成器生成斐波那契数
到目前为止,已完成的这些函数都只能输出斐波那契序列中的单个值。如果要将到某个值之前的整个序列输出,又该怎么做呢?用 yield
语句很容易就能把 fib5()
转换为Python生成器。在对生成器进行迭代时,每轮迭代都会用 yield
语句从斐波那契序列中吐出一个值,如代码清单1-9所示。
代码清单1-9 fib6.py
from typing import Generator
def fib6(n: int) -> Generator[int, None, None]:
yield 0 # special case
if n > 0: yield 1 # special case
last: int = 0 # initially set to fib(0)
next: int = 1 # initially set to fib(1)
for _ in range(1, n):
last, next = next, last + next
yield next # main generation step
if __name__ == "__main__":
for i in fib6(50):
print(i)
运行fib6.py将会打印出斐波那契序列的前51个数。 for
循环 for i in fib6(50):
每一次迭代时, fib6()
都会一路运行至某条 yield
语句。如果直到函数的末尾也没遇到 yield
语句,循环就会结束迭代。