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的chardet库获得文件编码并修改编码
Jan 22 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python实现函数极小值
Jul 10 Python
基于python使用tibco ems代码实例
Dec 20 Python
Python Json数据文件操作原理解析
May 09 Python
Django之全局使用request.user.username的实例详解
May 14 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
Python必须了解的35个关键词
Jul 16 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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 win下Socket方式发邮件类
2009/08/21 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP查询网站的PR值
2013/10/30 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
python unittest单元测试的步骤分析
2021/08/02 Python