使用生成器函数时的增量(a,b=b,a+b)

2024-04-25 12:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下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 二


Tags: infordefrange序列增量nextprint
3条回答

首先,您可以通过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循环已经完成,就不能再调用next了

相关问题 更多 >