繁体   English   中英

python 中的斐波那契数列使用生成器

[英]Fibonacci sequence in python using generator

def fibonacci_sequence():
    a,b = 1,1
    while True:
        yield a
        a,b = b, a+b

for i in range(10):
    print(fibonacci_sequence().__next__())

我尝试在 Python 3 中使用它来打印出斐波那契数列。 但是程序只是一遍又一遍地打印 1

您在每次迭代中声明一个新的生成器,您需要在循环之外创建一个。

def fibonacci_sequence():
    a,b = 1,1
    while True:
        yield a
        a,b = b, a+b

generator = fibonacci_sequence()
for i in range(10):
    print(generator.__next__())

你也可以使用next()

generator = fibonacci_sequence()
for i in range(10):
    print(next(generator))

您每次都在循环中重新初始化fibonacci_sequence ,如下所示:

def fibonacci_sequence():
    a,b = 1,1
    while True:
        yield a
        a,b = b, a+b

f = fibonacci_sequence()

for i in range(10):
    print(next(f))

如前所述,您只需在循环外实例化生成器一次。

另外,避免直接调用__next__ ,而是使用next(generator/iterator)

话虽如此,在这种简单的情况下,只需让for指令处理迭代协议(即调用iter ,调用next并捕获StopIteration异常)。

我们也可以将循环写为:

import itertools as it

def fibonacci_sequence():
    a,b = 1,1
    while True:
        yield a
        a,b = b, a+b

for k in it.islice(fibonacci_sequence(),10):
    print(k)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM