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

标签: python
8人阅读 评论(0) 收藏 举报
分类:

在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
所以在实际使用中,要搞清楚自己到底要实现怎样的赋值
查看评论

Java中a+=b和a=a+b的区别

Java中a+=b和a=a+b的区别
  • rl529014
  • rl529014
  • 2015-09-02 09:43:43
  • 6016

Lintcode A+B问题

问题描述 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 注意事项 你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。 说明 ...
  • waltonhuang
  • waltonhuang
  • 2016-07-20 08:25:59
  • 3148

Java中a=a+b 与 a+=b区别 以及和类型转换的关系

很久之前学习过 a=a+b 和a+=b的一些区别,进来再次回想起来,发现理解的还不透彻,所以又查资料找文件重新学习了一番。 比较这两种运算符的区别,可以有以下两个方面的比较: 执行效率和类型转换。...
  • zq602316498
  • zq602316498
  • 2014-08-23 12:19:17
  • 1764

A + B (python)

据说 pyhon很好用 手动滑稽Problem DescriptionCalculate a+b. InputTwo integer a,b (0
  • zb756999355
  • zb756999355
  • 2017-06-05 19:28:56
  • 755

lintcode刷题 A + B 问题 位运算

A + B 问题 15:00  Start 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 您在真实的面试中是否遇到过这个题?  Yes 样例 如果 ...
  • cjt5047
  • cjt5047
  • 2016-02-18 15:55:26
  • 3336

Java中 a+=b和a=a+b有什么区别?

今天舍友突然问我“在java中  a+=b 和a=a+b 有什么区别”,说这是一道面试题。当时就不假思索的回答:“一样啊”,然后他说有位面试者也回答说一样,所以被淘汰了。当时感觉很惊奇,书上写的就是一...
  • m0_38022029
  • m0_38022029
  • 2018-03-18 23:27:08
  • 38

用Python求A+B+C

问题描述输入为一行,包括用空格分隔的三个整数,分别为 A、B、C(数据范围均在 -40 ~ 40 之间)。输出为一行,为“A+B+C”的计算结果。代码实现sum = 0...
  • qq_20976745
  • qq_20976745
  • 2016-07-12 16:16:38
  • 1266

sql中如何解決 SUM(A) + SUM(B) != SUM (A+B)

当使用数据库sql做统计时,通常会出现一个诡异的现象: SUM(A) + SUM(B) != SUM (A+B) 出现这个问题的原因是由于有null,以mysql为例,我们可以使用下面的方法解决: ...
  • liuxiao723846
  • liuxiao723846
  • 2015-05-28 15:01:30
  • 1885

Python——简单的A+B#虽然我觉得并不简单

Python map() sum() split() 1002: A+B(基本输入输出2) 描述 题目描述: 输入两个数A,B,输出A+B的值。 输入: 第一行是数据的组数N,从第二行开始是N组由两个...
  • Karen_Yu_
  • Karen_Yu_
  • 2017-11-25 09:31:37
  • 879

Java中a=a+b 与 a+=b区别

一般认为a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没...
  • berber78
  • berber78
  • 2014-12-15 22:14:06
  • 1507
    个人资料
    等级:
    访问量: 191
    积分: 102
    排名: 126万+
    文章存档