`a, b = b, a+b` 和 `a = b; 有什么区别? b = a+b` 代表斐波那契数列

What is the difference between `a, b = b, a+b` and `a = b; b = a+b` for fibonacci

我是 python 的新手,所以我想问你一个问题..

之前在编写斐波那契函数时,我尝试替换

a, b = b, a+b

a = b
b = a + b

相信这是同一件事,但我注意到输出不同(而且是错误的) 这两个代码不应该做同样的事情吗? 这是完整的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def main(args):
    fibonacci(1000)
    return 0

def fibonacci(n):
    a, b = 0, 1
    while b < n:
         print b,
         a, b = b, a+b # if I comment this and decomment the two line below it shows me a different output 
        # a = b
        # b = a + b

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

b, a+b(b, a+b)(元组)相同。当您执行 a, b = b, a+b 时,您隐含地将第一个元素分配给左侧的变量,将第二个值分配给右侧的变量。

在您的替换中,您在 计算 b 之前更改了 a 的值 ,这在之前没有发生过。

所以,如果我们假设 a = 1b = 2,我们有:

a, b = (2, 1+2)
>> print(a)
>> 2
>> print(b)
>> 3

在你的后一个例子中,我们有:

a = 2
b = 2 + 2
>> print(a)
>> 2
>> print(b)
>> 4

当你这样做时:

a, b = b, a+b

a 将保留 b 的先前值,b 将根据先前的值保留 a+b

但是当你这样做时:

a = b
b = a + b

a 的值在 a=b 期间更新为 b,因此 a+b 的结果将与 a 现在更新的结果不同。

例如,查看交换两个值的简单代码。这可能是因为值的动态变化:

>>> a , b = 5, 10
>>> a, b = b, a
>>> a, b
(10, 5)