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数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
python查看列的唯一值方法
Jul 17 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
python的re模块使用方法详解
Jul 26 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
python 读取、写入txt文件的示例
Sep 27 Python
python开发的自动化运维工具ansible详解
Aug 07 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生成随机数或者字符串的代码
2008/09/05 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
PHP 实现缩略图
2021/03/09 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
移动节点的jquery代码
2014/01/13 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
angular2使用简单介绍
2016/03/01 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python实现将xml导入至excel
2015/11/20 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Python如何急速下载第三方库详解
2020/11/02 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
会计专业求职信范文
2014/03/16 职场文书
倡议书范文
2014/04/16 职场文书
工会换届选举方案
2014/05/21 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
公司合并协议书范本
2014/09/30 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
商场广播稿范文
2015/08/19 职场文书