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自动化测试之setUp与tearDown实例
Sep 28 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
安装Python的教程-Windows
Jul 22 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Django如何配置mysql数据库
May 04 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Python 线程池用法简单示例
Oct 02 Python
python 回溯法模板详解
Feb 26 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
Python基于Webhook实现github自动化部署
Nov 28 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
工作睡觉检讨书
2014/02/25 职场文书
品牌转让协议书
2014/08/20 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
美术教师个人工作总结
2015/02/06 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
小学毕业教师寄语
2019/06/21 职场文书
Java版 单机五子棋
2022/05/04 Java/Android