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实现数通设备端口监控示例
Apr 02 Python
简单介绍Python中的struct模块
Apr 28 Python
python学习教程之使用py2exe打包
Sep 24 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
python 实现手机自动拨打电话的方法(通话压力测试)
Aug 08 Python
python爬虫增加访问量的方法
Aug 22 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
python用分数表示矩阵的方法实例
Jan 11 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
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
Web程序工作原理详解
2014/12/25 PHP
jQuery的学习步骤
2011/02/23 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
写给女朋友的道歉信
2014/01/08 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
美容院经理岗位职责
2014/04/03 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公务员个人年终总结
2015/02/12 职场文书
营业员岗位职责范本
2015/04/14 职场文书
士兵突击观后感
2015/06/16 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
详解MySQL的半同步
2021/04/22 MySQL