一行给多个变量赋值

1 投票
3 回答
633 浏览
提问于 2025-04-17 23:45

我正在尝试制作斐波那契数列,但我不明白为什么这个:

def fibonacci(n):
    f1 = 0
    f2 = 1
    i = 1

    while i < n:
        print(f2)
        f1 = f2
        f2 = f1 + f2

        i += 1
    return f3

会返回 1, 2, 4, 8,而这个:

def fibonacci(n):

    f1 = 0
    f2 = 1
    i = 1

    while i < n:
        print(f2)
        f1, f2 = f2, f1 + f2
        i += 1
    return f3

却返回斐波那契数列。

3 个回答

0

变量 f1 和 f2 同时 获取新的值,分别是 f2 和 f1 + f2,这个表达式是:

f1, f2 = f2, f1 + f2。

这说明右边的表达式会先计算完 再进行赋值。也就是说,f1 + f2 使用的是 f1 的旧值,而不是新的值。右边的表达式是从左到右依次计算的。

1

在第一个例子中,前一次循环中得到的 f1 的值在更新 f2 之前被丢弃了。

f1, f2 = f2, f1 + f2

可以看作是更简洁的写法

tmp = f1
f1 = f2
f2 = tmp + f2

如果这样能让你更明白的话。后者是你在很多其他编程语言中为了达到同样效果需要做的事情。

5

在后面的例子中,右边的部分会被计算:

f1, f2 = f2, f1 + f2

所以在计算 f2 的时候,使用的 f1 的值是“旧的”值。

在你的代码中,当你执行:

f1 = f2
f2 = f1 + f2

到计算 f2 的新值时,f1 的值已经改变了。

撰写回答