首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在python中运行fib()时,为什么a,b= b,a+b不等于a= b,b=a+b?

在Python中运行fib()函数时,为什么a, b = b, a+b不等于a = b, b = a+b

这涉及到Python中的变量赋值机制。在Python中,多重赋值语句是同时进行的,即右边的表达式会先计算出结果,然后再进行赋值。因此,当执行a, b = b, a+b时,首先会计算右边的表达式b, a+b,然后再将结果按顺序赋值给左边的变量ab

具体来说,当执行a, b = b, a+b时,Python会按照以下步骤进行计算和赋值:

  1. 计算右边的表达式b, a+b,此时b的值为上一次循环中的a+ba+b的值为上一次循环中的a+bb的和。
  2. 将计算得到的结果按顺序赋值给左边的变量ab,即将右边表达式的第一个值赋给a,第二个值赋给b

而如果使用a = b, b = a+b的赋值方式,由于Python的多重赋值是同时进行的,即右边表达式的计算结果会同时赋值给左边的变量,因此会导致错误的结果。具体来说,当执行a = b, b = a+b时,Python会按照以下步骤进行计算和赋值:

  1. 计算右边的表达式b, a+b,此时b的值为上一次循环中的a+ba+b的值为上一次循环中的a+bb的和。
  2. 同时将右边表达式的结果赋值给左边的变量,即将右边表达式的第一个值赋给a,然后将右边表达式的第二个值赋给b。由于右边表达式的第一个值已经被赋给了a,因此在赋值给b时,b的值已经发生了改变,导致错误的结果。

综上所述,正确的赋值方式是a, b = b, a+b,这样可以保证在多重赋值时,右边表达式的计算结果不会影响到左边变量的赋值。这种赋值方式常用于交换两个变量的值、实现斐波那契数列等场景。

腾讯云相关产品和产品介绍链接地址:

  • 云计算产品:https://cloud.tencent.com/product
  • 人工智能产品:https://cloud.tencent.com/product/ai
  • 物联网产品:https://cloud.tencent.com/product/iotexplorer
  • 移动开发产品:https://cloud.tencent.com/product/mobility
  • 存储产品:https://cloud.tencent.com/product/cos
  • 区块链产品:https://cloud.tencent.com/product/bc
  • 元宇宙产品:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python a=a+b 与 a+=b 有什么不同?

只要熟悉 Python,那么你肯定知道 a=a+b 与 a+=b 都可以实现对对象 a 的自增操作,可以除此之外,他们有什么不同呢?如果这个是面试题,你会怎么回答呢?...当弄不清楚的时候,我们可以 Python 解释器中试验一下。...a += b的 a 与原来的 a 的 id 是同一个,说明 a += b 并没有创建新的对象,而 a = a+b 新创建了一个新的对象,创建对象是有成本的,因此在这种情况下, a+=b 的性能是比较高的...对于可变对象,a+=b a 的基础上进行自增,不创建新对象,而 a=a+b,创建了新的对象,然后再让变量 a 指向这个新创建的对象,涉及创建对象的操作,因此性能较差。...最后的话 现在你应该明白了 a=a+b 与 a+=b, a=a*b 与 a*=b 的区别。对于列表而言,a*=b、a*=b原有列表上原地进行操作,不创建新的对象,性能会更高效。

1.6K30

Java,关于a=a+b与a+=b的区别「建议收藏」

就单纯的执行这两条语句,不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。...right // a=a+b; //error a=(int) (a+b); //right } } 当使用a=a+b的时候,会抛出”Exception in thread “main” java.lang.Error...,和 a=(int)((float)a+b)是等价的!...原因:Java基本类型进行算术运算的时候,会发生小字节类型向大字节类型转换的现象。如图中 int 类型和float类型进行加法运算时会将 a 先转换为float类型,然后再和b相加。...这样结果类型变成了float类型,如果这时候试图把float类型赋值给a便会抛异常。

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

    今天舍友突然问我“java a+=b 和a=a+b 有什么区别”,说这是一道面试题。当时就不假思索的回答:“一样啊”,然后他说有位面试者也回答说一样,所以被淘汰了。...java语言中,a+=b和a=a+b的主要区别是在运算的精度上。类似的有“-= 、 *= 、/= 、%= ”,这里以a+=b 与 a=a+b 举例说明一下。...javaa+4,会进行 自动类型转换 ,所以a+4 会转换成int类型。而变量a还是byte类型,将int 类型的a+4赋值给byte类型的a ,无疑会报错。...大家需要明确的是“+=”是java的一个运算符,而不是两个,所以在运算 会进行自动类型转换。所以在编译没有报错。...3、 总结一下 两个变量的数据类型一样:a+=b 和a=a+b 是没有区别的。 但是当两个变量的数据类型不同时,就需要考虑一下数据类型自动转换的问题了。 也就是涉及到精度了。

    1.1K40

    【25】Python生成器generat

    所以列表元素按照某种算法推算出来,那我们是否可以循环的过程不断的推算出后续的元素呢?这样可以节约大量空间。python,这种一边循环一边计算的机制,成为生存器:generator。...创建生成器有很多种方法,最简单的方法就是把一个列表[]改成(),就创建了一个generator: g=(i+1 for i in range(10)) print(g) 运行的结果就是根据算法生成的,只有循环调用的时候...直到计算到最后一个元素,没有更多的元素,会抛出异常StopIteration的错误。...(max): n ,a,b =0,0,1 while n <max: print(b) a,b=b,a+b n=n+1 return...b ##有yield存在就不叫函数了,而叫生成器 a,b=b,a+b n=n+1 return "done" print(fib(10)) f=fib(10

    48410

    零基础学Python(第十七章 模块import)

    开发环境:【Win10】 开发工具:【Visual Studio 2019】 本章内容为:【模块import】 1、什么是模块: 在前面的几个章节我们脚本上是用 python 解释器来编程,如果你从...为此 Python 提供了一个办法,把这些定义存放在文件,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。...模块可以被别的程序引入,以使用该模块的函数等功能。这也是使用 python 标准库的方法。 下面是一个使用 python 标准库模块的例子。...a+b print() def fib2(n): # 返回到 n 的斐波那契数列 result = [] a, b = 0, 1 while b < n:...result.append(b) a, b = b, a+b return result 引入模块并使用: 3、总结: a)、本类写方法,一定先写后用。

    17510

    Python学习之迭代器和生成器

    迭代器 Python如果一个对象可被循环(遍历)该对象每一个元素的过程叫做迭代。例如 ,字典、字符串、列表、元祖、集合等。他们可被迭代的原因是,都有一个共同的内置函数__iter__。...因此我们使用while循环,配合异常捕获代码 try except一起使用,当迭代过程中出现异常,将会自动停止下一次循环。...,a+b 6 n=n+1 7 return 'done' 8 9 a=fib1(5) 10 print(a) 输出结果 1 1 2 1 3 2 4 3 5 5 6 done...用另外一种方法 1 def fib2(max): 2 n,a,b=0,0,1 3 while n<max: 4 yield b 5 a,b=b,a+b 6...再看前两个函数 fib1 和fib2 ,fib1计算机开辟一个固定的内存空间用于存储完整的计算结果,但如果我们想访问计算结果的某一个元素,就需要先遍历整个计算结果,才能通过对象下标或者用for 循环和

    28230

    Python基础13-模块的使用

    ,这种拿来主义,可以极大地提升我们的开发效率 #ps: 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件以便永久保存下来,需要就通过python..., 1 while b < n: print(b, end=' ') a, b = b, a+b print() def fib2(n): # return...a, b = b, a+b return result if __name__ == "__main__": import sys fib(int(sys.argv[1]))...#执行:python fib.py python fib.py 50 #命令行 模块的搜索路径 模块搜索路径的优先级: 1.内存已经加载过的 2.内置模块 3.sys.path...2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样) 3 依赖安装默认指定的 注意:支持软连接的文件系统,执行脚本所在的目录是软连接之后被计算的,换句话说

    37230
    领券