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 HTMLParser模块解析html获取url实例
Apr 08 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
对python Tkinter Text的用法详解
Oct 11 Python
python中类的属性和方法介绍
Nov 27 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
Python爬虫开发与项目实战
Dec 16 Python
关于python中模块和重载的问题
Nov 02 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
第一个无线电台是由谁发明的
2021/03/01 无线电
php生成随机数的三种方法
2014/09/10 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
Python数据集切分实例
2018/12/08 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
python多线程同步实例教程
2019/08/11 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
建筑专业自荐信
2013/10/18 职场文书
致接力运动员广播稿
2014/02/17 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书