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
。为什么会这样?你知道吗
调用
print(next(fib(6)))
总是创建fib
生成器的新实例,并从中生成一个值,然后丢弃它。你知道吗另一方面:
创建生成器
fib
的实例f
,并从中生成三个值。你知道吗另外,使用
max
作为参数名是不受欢迎的,因为至少在本地范围内,您屏蔽了一个具有相同名称的内置函数。你知道吗相关问题 更多 >
编程相关推荐