使用生成器函数时增加(a,b = b,a + b)[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

有人可以解释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

python fibonacci
1个回答
1
投票

首先,您可以通过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循环,你不能再打电话了

© www.soinside.com 2019 - 2024. All rights reserved.