python支持类似于a += 3这种二元表达式。比如:
1 a += 3 -> a = a + 3
2 a -= 3 -> a = a - 3
3 a *= 3 -> a = a * 3
4 ...
在python中的某些情况下,这种二元赋值表达式可能比普通的赋值方式效率更高些。原因有二:
- 二元赋值表达式中,a可能会是一个表达式,它只需计算评估一次,而a = a + 3中,a要计算两次。
- 对于可变对象,可以直接在原处修改得到修改后的值,而普通的一元赋值表达式必须在内存中新创建一个修改后的数据对象,并赋值给变量
第一点无需解释。关于第二点,看下面的例子:
1 L = [1,2,3]
2 L = L + [4] # (1):慢
3 L += [4] # (2):快
4 L.append(4) # (3):快,等价于(2)
5
6 L = L + [5,6] # (4):慢
7 L += [5,6] # (5):快
8 L.extend([5,6]) # (6):快,等价于(5)
对于上面(1)和(4)的一元赋值表达式,先取得L,然后创建一个新的列表对象,将L拷贝到新列表对象中,并将4或5,6放进新列表对象,最后赋值给L。这个