在python中,语句a,b=b,a+b 和 a=b b=a+b ,会执行出两种完全不同的结果
一、我们首先来看两个例子及其原理解释:
>>> a = 1 >>> b = 2 >>> a,b = b,a+b >>> print(a,b) 2 3 >>> a = 1 >>> b = 2 >>> a = b >>> b = a+b >>> print(a,b) 2 4
从上面的结果可以看出来,a,b=b,a+b,实际上是先把b给保护起来(把b的值赋值给另外一个变量),再执行剩余的赋值操作,实际上执行的是如下代码:
#a,b = b,a+b执行的代码如下: temp = b b = a+b a = temp
可以这么理解:先进行等号右边的计算,再分别进行赋值操作
而a=b b=a+b,这个语句不用解释,就是正常的一步步的进行赋值操作,经过第一步的赋值,a的值变成了2,所以赋给b的 a+b的值自然就变成了4
#a=b b=a+b的解释如下: a = 1 b = 2 a = b #此时a的值变成2 b = a+b #a的值是2,b的值是2,a+b的值就是4,再赋值给b,b就是4
二、这两种语法在实际中产生的偏差展示:
以用迭代法(注意不是递归)构造斐波那契数列为例:
使用a,b=b,a+b,会得到正确的结果:
>>> def fib(n): a,b = 0,1 for i in range(1,n+1): b,a =a+b,b print(a) >>> fib(12) 1 1 2 3 5 8 13 21 34 55 89 144
而使用a=b b=a+b,就会产生错误的数列:
>>> def fib(n): a,b = 0,1 for i in range(1,n+1): a =b b = a+b print(a) >>> fib(12) 1 2 4 8 16 32 64 128 256 512 1024 2048所以在实际使用中,要搞清楚自己到底要实现怎样的赋值