Python二元赋值实用技巧解析

yipeiwu_com5年前Python基础

这篇文章主要介绍了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设计】。

相关文章

对dataframe进行列相加,行相加的实例

实例如下所示: >>> import pandas as pd >>> df = pd.DataFrame({"x":['a','b','c','...

python实现决策树分类

python实现决策树分类

上一篇博客主要介绍了决策树的原理,这篇主要介绍他的实现,代码环境python 3.4,实现的是ID3算法,首先为了后面matplotlib的绘图方便,我把原来的中文数据集变成了英文。 原...

Python csv模块使用方法代码实例

这篇文章主要介绍了Python csv模块使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import csv d...

python实现二维插值的三维显示

python实现二维插值的三维显示

本文实例为大家分享了二维插值的三维显示具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ 演示二维插值。 """ # -*- coding:...

Python入门篇之面向对象

面向对象设计与面向对象编程的关系   面向对象设计(OOD)不会特别要求面向对象编程语言。事实上,OOD 可以由纯结构化语言来实现,比如 C,但如果想要构造具备对象性质和特点的...