Python二元赋值实用技巧解析


Posted in Python onOctober 25, 2019

这篇文章主要介绍了Python二元赋值实用技巧解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

python支持类似于a += 3这种二元表达式。比如:

a += 3 -> a = a + 3
 a -= 3 -> a = a - 3
 a *= 3 -> a = a * 3
 ...

在python中的某些情况下,这种二元赋值表达式可能比普通的赋值方式效率更高些。原因有二:

二元赋值表达式中,a可能会是一个表达式,它只需计算评估一次,而a = a + 3中,a要计算两次。

对于可变对象,可以直接在原处修改得到修改后的值,而普通的一元赋值表达式必须在内存中新创建一个修改后的数据对象,并赋值给变量

第一点无需解释。关于第二点,看下面的例子:

L = [1,2,3]
 L = L + [4] # (1):慢
 L += [4] # (2):快
 L.append(4) # (3):快,等价于(2)

 L = L + [5,6] # (4):慢
 L += [5,6] # (5):快
 L.extend([5,6]) # (6):快,等价于(5)

对于上面(1)和(4)的一元赋值表达式,先取得L,然后创建一个新的列表对象,将L拷贝到新列表对象中,并将4或5,6放进新列表对象,最后赋值给L。这个过程中涉及到了几个步骤:新分配内存、内存中列表拷贝、放入新数据。

而(2)(3)是等价的,(5)(6)也是等价的,它们都是直接在内存中的原始列表处修改,不会有拷贝操作,新建的数据对象仅仅只是一个元素。

按照理论上来说,确实二元赋值方式要效率高一些,但要注意的是,列表中保存的只是各元素的引用,所以拷贝列表也仅仅只是拷贝一点引用,这是微乎其微的开销。所以一元赋值和二元赋值的差距在这一点的性能上基本没差距,主要的差距还在于一元、二元赋值方式可能存在的表达式不同评估次数。

总的来说,使用二元赋值表达式通常可以作为可变对象赋值的一种优化手段。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现数通设备tftp备份配置文件示例
Apr 02 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
Jun 13 Python
Python中关于浮点数的冷知识
Sep 22 Python
python 字典的打印实现
Sep 26 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
pytorch之添加BN的实现
Jan 06 Python
python将unicode和str互相转化的实现
May 11 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 #Python
基于Python实现签到脚本过程解析
Oct 25 #Python
python实现大学人员管理系统
Oct 25 #Python
Python队列、进程间通信、线程案例
Oct 25 #Python
python银行系统实现源码
Oct 25 #Python
python Event事件、进程池与线程池、协程解析
Oct 25 #Python
python实现简单银行管理系统
Oct 25 #Python
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
类似框架的js代码
2006/11/09 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
javascript基础知识讲解
2017/01/11 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
python语言是免费还是收费的?
2020/06/15 Python
用Python进行websocket接口测试
2020/10/16 Python
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
企业管理部经理岗位职责
2013/12/24 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
诚信承诺书范文
2014/03/27 职场文书
文明礼仪倡议书
2015/04/28 职场文书
音乐会主持人开场白
2015/05/28 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏