python多重赋值的一个小问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JewelCCL/article/details/79187469

今天无意中发现在python中的一个多重赋值的小问题,自己一开始是比较简单化的理解了这个多重赋值操作的概念,所以导致在一道实现斐波那契数列的代码中,发现了自己的问题,顺便记录下吧,当作是学习总结。


首先是python的多重赋值操作,先用一个直观的代码来看:

a,b = 0,1 
上述就是一个最简单的多重赋值操作,这个赋值操作的作用是将赋值操作 = 右侧的对象逐一赋给左侧的对象,所以这个操作结果是a对象的值为0,b对象的值为1,这点很好理解。

然鹅,如果是下列的代码呢?

# Fibonacci series:
a, b = 0, 1
while b < 10:
    print b
    a, b = b, a + b 
  


显然,运行结果是正确的:

1
1
2
3
5
8
那么如果将代码改成这样呢?

#Fibonacci series:
a = 0
b = 1
while b < 10:
    print b
    a = b
    b = a + b
运行结果是:

1
2
4
8
显然不正确。。。。


其实问题在于多重赋值操作是一个等号右边表达式会在赋值操作进行之前被完全解析的过程。也就是说,对于

a, b = 0, 1

变量ab是同时获得新的值0和1。而对于

a, b = b, a + b
说明等号右边的表达式在赋值之前首先被完全解析右侧表达式是从左到右计算的。在赋值完成之前,a+b的操作是已经完成了表达式的计算结果了的,所以,如果将 a,b = b, a+b 等同于 a = b,b = a+b 是完全不正确的。


(本文完)



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

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭