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网络爬虫功能的基本写法
Jan 28 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
django model通过字典更新数据实例
Apr 01 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
Python logging日志模块 配置文件方式
Jul 12 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
python asyncio 协程库的使用
Jan 21 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
Javascript实现字数统计
2015/07/03 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
JS常用知识点整理
2017/01/21 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Python base64编码解码实例
2015/06/21 Python
Python 多线程实例详解
2017/03/25 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python MD5加密实例详解
2017/08/02 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
详解python中的json和字典dict
2018/06/22 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
wxPython实现文本框基础组件
2019/11/18 Python
Django ModelForm操作及验证方式
2020/03/30 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
应用服务器有那些
2012/01/19 面试题
中班下学期个人总结
2015/02/12 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
vue实现移动端div拖动效果
2022/03/03 Vue.js