Python:变量使用及其区别("a, b = 0, 1"与"a = 0", "b = 1")
我在看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
中,右边的表达式会先被计算,然后它们的结果会被赋值给 a
和 b
。这就像下面这样:
_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