在一行中分配多个变量

时间:2014-03-25 02:46:52

标签: python

我正在尝试制作斐波那契序列我不知道为什么:

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

返回Fibonacci序列。

3 个答案:

答案 0 :(得分:4)

在后一个示例中,右侧评估 first

f1, f2 = f2, f1 + f2

因此,f1计算中使用的f2的值是“old”值。

在您的代码中,当您这样做时:

f1 = f2
f2 = f1 + f2

当您评估f1的新值时,f2的值已经更改。

答案 1 :(得分:1)

在第一个示例中,在f1更新之前,将丢弃上一次迭代中f2的值。

f1, f2 = f2, f1 + f2

可以看作是

的简写
tmp = f1
f1 = f2
f2 = tmp + f2

如果这有助于它更有意义。后者是您在许多其他语言中必须做的事情,以达到预期的效果。

答案 2 :(得分:0)

变量f1和f2 同时获得新值f2和f1 + f2,表达式

f1,f2 = f2,f1 + f2。

证明在进行任何赋值之前,首先评估右侧的表达式。 f1 + f2使用f1旧值,而我们不使用f1新值。右侧表达式从左到右求值。