Python:变量使用及其区别("a, b = 0, 1"与"a = 0", "b = 1")

3 投票
2 回答
15296 浏览
提问于 2025-04-18 02:49

我在看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的值来决定的,会返回一个有效的斐波那契数列。

如果你把它改成这样,单独使用变量"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, 16等等)。

所以我在想,为什么会这样呢?这两种变量的使用有什么实际的区别呢?

2 个回答

4

    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

这就解释了二的幂是怎么来的。

12

在做这个操作:

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

撰写回答