关于Python中的生成器

时间:2017-01-15 14:18:34

标签: python python-3.x generator

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1     
    return 'done'

print(next(fib(6)))
print(next(fib(6)))
print(next(fib(6)))

结果是1,1,1。 但是,如果我更改print()中的内容如下:

f = fib(6)
print(next(f))
print(next(f))
print(next(f))

结果为1, 1, 2。为什么会这样?

1 个答案:

答案 0 :(得分:4)

调用print(next(fib(6)))始终会创建fib生成器的新实例并从中生成一个值,然后将其丢弃。

另一方面:

f = fib(6)
print(next(f))
print(next(f))
print(next(f))

创建生成器f的实例fib,并从中生成三个值。

此外,使用max作为参数名称是不受欢迎的,因为至少在本地范围内,您将屏蔽具有相同名称的内置函数。