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内置函数bin() oct()等实现进制转换
Dec 30 Python
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python实现完整的事务操作示例
Jun 20 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
python中有关时间日期格式转换问题
Dec 25 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
python的pip有什么用
Jun 17 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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 生成WML页面方法详解
2009/08/09 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python 变量初始化空列表的例子
2019/11/28 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
Python try except else使用详解
2021/01/12 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
商务英语专业求职信
2014/06/26 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
2014年公司工作总结
2014/11/22 职场文书
继承权公证书范本
2015/01/23 职场文书
共青团员自我评价
2015/03/10 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python