关于python多重赋值的小问题


Posted in Python onApril 17, 2019

前言

今天无意中发现在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

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

a, b = b, a + b

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
python 全文检索引擎详解
Apr 25 Python
Python模拟用户登录验证
Sep 11 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
python sys.argv[]用法实例详解
May 25 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
python 实现dict转json并保存文件
Dec 05 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python使用pymysql模块操作MySQL
Jun 16 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 #Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 #Python
Python中如何导入类示例详解
Apr 17 #Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 #Python
python3转换code128条形码的方法
Apr 17 #Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 #Python
Python2与Python3的区别实例总结
Apr 17 #Python
You might like
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
拖拉表格的JS函数
2008/11/20 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
python基础教程之Hello World!
2014/08/29 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
Shell编程面试题
2016/05/29 面试题
医学生自荐信范文
2013/12/03 职场文书
护理实习自我鉴定
2013/12/14 职场文书
十佳护士获奖感言
2014/02/18 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL