关于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操作日期和时间的方法
Mar 11 Python
python使用循环实现批量创建文件夹示例
Mar 25 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
Python中的getopt函数使用详解
Jul 28 Python
python实现按任意键继续执行程序
Dec 30 Python
python装饰器实例大详解
Oct 25 Python
Python中进程和线程的区别详解
Oct 29 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 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代码把全角数字转为半角数字
2007/12/10 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
jQuery 入门讲解1
2009/04/15 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
Python中subprocess模块用法实例详解
2015/05/20 Python
Python简明入门教程
2015/08/04 Python
Python端口扫描简单程序
2016/11/10 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python实现五子棋小游戏
2020/03/25 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
python进程和线程用法知识点总结
2019/05/28 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
食品厂厂长岗位职责
2014/01/30 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
暑期培训心得体会
2014/09/02 职场文书
工会文体活动总结
2015/05/07 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL