这个问题在这里已有答案:
有人可以解释a
的增量或a
的值是如何在for循环内发生的,以生成Fib序列吗?我理解(a,b = b,a + b)。但是,我无法确定调用next()时for循环中的增量是如何发生的。
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
x = fib(4)
print(x.__next__())
print(x.__next__())
print(x.__next__())
print(x.__next__())
0 1 1 2
首先,您可以通过next(x)
转到生成器的下一个元素。
只需在代码中使用print语句也可以帮助您理解。
def fib(n):
a, b = 0, 1
for _ in range(n):
print(a, b)
yield a
a, b = b, a + b
x = fib(4)
print(next(x))
print(next(x))
print(next(x))
print(next(x))
0 1
0
1 1
1
1 2
1
2 3
2
这里下一个函数懒惰地计算并打印出a的值,直到你再次调用next
。所以在第一个下一个,它打印出0。
然后当你再次呼叫时,a = 1且b = 1,你得到a = 1。
然后当你再次呼叫时,a = 1且b = 2,你得到a = 1。
然后当你再次呼叫时,a = 2且b = 3,你得到a = 2。
之后,由于你完成了你的for循环,你不能再打电话了