我正在使用python 3.3.3。我正在学习生成器,据我所知,我已经学会了两种初始化生成器的方法。
使用生成器理解
gen1 = (i * i for i in range(6))
使用函数和产量
def fib():
a,b=0,1
while True:
yield a
a,b=b,a+b
gen2=fib()
现在当我一次又一次地使用next(gen1)时,我得到0,1,4,9,...作为输出。 但是当我一次又一次地使用next(fib())时,我得到0,0,0,0作为输出。我认为输出应该是0,1,1,2,3,5,....
print(next(fib())
print(next(fib())
print(next(fib())
print(next(fib())
是打印0,0,0,0
的代码答案 0 :(得分:1)
>>> def fib():
... a,b=0,1
... while True:
... yield a
... a,b=b,a+b
...
>>> next(fib())
0
>>> next(fib())
0
>>> gen = fib()
>>> next(gen)
0
>>> next(gen)
1
>>>
执行next(fib())
时,每次都是从头开始创建生成器。
答案 1 :(得分:0)
以下程序在Python 3.3.3中整齐地打印斐波那契数字你能告诉我你的完整程序吗?
def fib():
a,b=0,1
while True:
yield a
a,b=b,a+b
gen2=fib()
for i in gen2:
print(i)
if i > 100: #otherwise this will go into an infinite loop
break
打印
0
1
1
2
3
..
144