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
。为什么会这样?
答案 0 :(得分:4)
调用print(next(fib(6)))
始终会创建fib
生成器的新实例并从中生成一个值,然后将其丢弃。
另一方面:
f = fib(6)
print(next(f))
print(next(f))
print(next(f))
创建生成器f
的实例fib
,并从中生成三个值。
此外,使用max
作为参数名称是不受欢迎的,因为至少在本地范围内,您将屏蔽具有相同名称的内置函数。