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使用正则表达式替换匹配成功的组
Nov 17 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
django session完成状态保持的方法
Nov 27 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Apache部署Django项目图文详解
Jul 30 Python
python3实现绘制二维点图
Dec 04 Python
python加载自定义词典实例
Dec 06 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 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 cookis创建实现代码
2009/03/16 PHP
php遍历目录viewDir函数
2009/12/15 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
百联网上商城:i百联
2017/01/28 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
留学自荐信的技巧
2013/10/17 职场文书
个人自我鉴定
2013/11/07 职场文书
厂区绿化方案
2014/05/08 职场文书
读书月活动方案
2014/05/22 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
单位委托函范文
2015/01/29 职场文书
清洁员岗位职责
2015/02/15 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2016年公司新年寄语
2015/08/17 职场文书