在 Python 中存在二元表达式 + 赋值语句的组合,就像下面这样:
a += b
相信但凡是写过 Python 的都用过,格式大多都只是简写,这种形式的被称为增强赋值语句,这是 Python 从 C 语言抄,阿不,借鉴过来的...
在大多数人的观念里,这么简单的东西你还说个锤子.隔壁家的狗子都会用。我不否认很多人会用,在很多人只是把它简单的当作一种简便写法,写代码的时候少可以写几个字母,但其实这只是它其中最微不足道的一个优点,增强赋值绝没有这么简单!
0x00 执行更快
为什么执行速度更快呢,我们来看,传统的赋值语句的形式是这样的 "a = a + b",在这种形式中,a 出现了 2 次,所以必须要执行 2 次;但是在增强赋值语句中,"a += b" 中 a 只出现了 1 次,所以只需要执行 1 次即可,所以执行速度更快。
0x01 自动执行修改运算
在执行运算的时候,增强赋值会自动执行原处的修改运算,而不是传统形式的 copy 形式,这个可能有点难理解,不慌,有我...
我们来想一下列表,列表增加元素的方式有很多,比如在列表末尾增加一个新的元素:
如果要在末尾新增一组数据:
在上面的两种情况,其实合并对共享对象引用产生的副作用会更小,但是它的运行速度更慢。合并必须创建一个新的对象,把左侧的复制到列表中,然后再把右侧的复制到列表中。相比而言,在原处方法调用直接在一个内存块末尾添加项。
当然了,在我们使用增强赋值语句来扩展列表的时候,可以忘记这些细节。
0x02 共享引用
为什么要在这提到共享引用呢?“+=” 包含着对列表是进行原处修改的意思,而 "+" 是合并,总是生成新的对象。就所有的共享引用的情况而言,只有其他变量名引用的对象被修改,其中的差别才可能体现出来,比如像下面这个例子:
这个只是对列表、字典等可变对象才有用,而且这种情况比较罕见。