当前位置:嗨网首页>书籍在线阅读

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 语句,循环就会结束迭代。