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多线程实例教程
Sep 06 Python
Python中的自定义函数学习笔记
Sep 23 Python
python网络编程之数据传输UDP实例分析
May 20 Python
Python3处理文件中每个词的方法
May 22 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
django 多数据库配置教程
May 30 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
pandas参数设置的实用小技巧
Aug 23 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 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检测图片主要颜色的方法
2015/07/01 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
PHP重载基础知识回顾
2020/09/10 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
Python闭包的两个注意事项(推荐)
2017/03/20 Python
python机器学习之神经网络(三)
2017/12/20 Python
详解Python的三种可变参数
2019/05/08 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python 动态调用函数实例解析
2019/10/21 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
医院辞职信范文
2014/01/17 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Java spring单点登录系统
2021/09/04 Java/Android