Python:变量的用法及其差异(" a,b = 0,1" VS" a = 0"," b = 1")

时间:2014-04-15 13:21:35

标签: python variables fibonacci

我正在查看Python手册并找到了斐波那契数字生成器的代码片段:

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

输出取决于n并返回有效的Fibonacci序列。

如果你改造它以单独使用变量“a”和“b”:

def fib(n):    # write Fibonacci series up to n
    a = 0
    b = 1
    while b < n:
        print(b, end=' ')
        a = b
        b = a+b
    print()

然后它会打印一个以2的幂为单位的数字序列(例如1,2,4,8,1等等)。

所以我想知道为什么会这样?两个变量使用之间的实际差异是什么?

2 个答案:

答案 0 :(得分:9)

这样做的:

a, b = b, a+b

相当于:

temp = a
a = b
b += temp

它允许您同时进行两次计算而无需中间/临时变量。

不同之处在于,在您的第二段代码中,当您执行第二行b = a+b时,您已经在上一行修改了a 与第一段代码相同。

实施例

>>> a = 2
>>> b = 3
>>> a,b
2 3
>>> a,b = b,a
>>> a,b
3 2

另一方面,如果您使用问题中显示的第二种方法:

>>> a = 2
>>> b = 3
>>> a,b
2 3
>>> a = b
>>> b = a
>>> a,b
3 3

答案 1 :(得分:2)

    a, b = b, a+b

首先评估右手表达式,并将结果分配给ab。这类似于以下内容:

    _new_a = b
    _new_b = a+b
    a = _new_a
    b = _new_b

另一方面,在

    a = b
    b = a+b

您正在修改a,然后再将其添加到b。这相当于

    a, b = b, b+b

解释了两个人的力量来自哪里。