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的web.py框架中url的设定方法
Jul 11 Python
回调函数的意义以及python实现实例
Jun 20 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
mac下如何将python2.7改为python3
Jul 13 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
如何通过python画loss曲线的方法
Jun 26 Python
解决python3 安装不了PIL的问题
Aug 16 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
最新pycharm安装教程
Nov 18 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 $_SERVER当前完整url的写法
2009/11/12 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
python实现通过shelve修改对象实例
2014/09/26 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
浅谈python迭代器
2017/11/08 Python
Python面向对象之继承代码详解
2018/01/29 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python构造函数init实例方法解析
2020/01/19 Python
python让函数不返回结果的方法
2020/06/22 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
网络维护管理员的自我评价分享
2013/11/11 职场文书
平面设计岗位职责
2013/12/14 职场文书
公司年会演讲稿范文
2014/01/11 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书