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 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
Python 中的lambda函数介绍
Oct 10 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
详解python中递归函数
Apr 16 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
python访问hdfs的操作
Jun 06 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
python flappy bird小游戏分步实现流程
Feb 15 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遍历二维数组的代码
2011/04/22 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python Web编程之WSGI协议简介
2018/07/18 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python3远程监控程序的实现方法
2019/07/15 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
超市后勤自我鉴定
2014/01/17 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
爱国主义主题班会
2015/08/14 职场文书
GO中sync包自由控制并发示例详解
2022/08/05 Golang