python的 a,b=b,a+b 和 a=b b=a+b 的区别

在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
所以在实际使用中,要搞清楚自己到底要实现怎样的赋值
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页