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数据结构之二叉树的建立实例
Apr 29 Python
Python3基础之基本运算符概述
Aug 13 Python
python笔记:mysql、redis操作方法
Jun 28 Python
Python socket实现简单聊天室
Apr 01 Python
Python3.6简单反射操作示例
Jun 14 Python
numpy返回array中元素的index方法
Jun 27 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
keras 读取多标签图像数据方式
Jun 12 Python
Python如何给你的程序做性能测试
Jul 29 Python
python用opencv 图像傅里叶变换
Jan 04 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
详解Python中的静态方法与类成员方法
2017/02/28 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
解析Python3中的Import
2019/10/13 Python
python实现名片管理器的示例代码
2019/12/17 Python
python交互模式基础知识点学习
2020/06/18 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
地震捐款倡议书
2014/08/29 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2016春节放假通知范文
2015/08/18 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏