[英]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.