Python生成器初始化 - 2种方式,不同的输出

时间:2014-02-07 09:09:07

标签: python python-3.x generator

我正在使用python 3.3.3。我正在学习生成器,据我所知,我已经学会了两种初始化生成器的方法。

  1. 使用生成器理解

    gen1 = (i * i for i in range(6))
    
  2. 使用函数和产量

    def fib():
        a,b=0,1
        while True:
            yield a
            a,b=b,a+b
    gen2=fib()
    
  3. 现在当我一次又一次地使用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

    的代码

2 个答案:

答案 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