为什么这个python代码
a += 1
比好
a = a + 1
除了第一个更容易理解和更干净之外如果python处理每条语句的方式有任何其他差异,或者每条语句之间有任何性能差异,或者我可以使用任何我想要的东西,那么我为什么要使用它呢。
在您给出的简单情况下,没有什么区别。扩充赋值被认为更容易阅读,因为它是一个常见的习语,并且简洁地表达了一个常见操作。
但在某些情况下,它会产生影响。如果你增加的地方来自一个复杂的表达或有副作用的表达,你不想重复
a[call_expensive_function()] += 1
vs
a[call_expensive_function()] = a[call_expensive_function()] + 1
此外,一种类型可以实现不同于+
的+=
。一个例子是列表:
l1 = [1, 2, 3]
l2 = l1
l1 = l1 + [4, 5]
print(l1) # prints [1, 2, 3, 4, 5]
print(l2) # prints [1, 2, 3]
l3 = [1, 2, 3]
l4 = l3
l3 += [4, 5]
print(l3) # prints [1, 2, 3, 4, 5]
print(l4) # prints [1, 2, 3, 4, 5]
列表通过就地修改列表来实现+=
(类似于extend()
方法(,而+
创建一个新列表。正如您从上面看到的,如果您对同一列表有多个引用,这将产生影响。
a += 1
比a = a+1
快一点。
请参阅示例代码。
def f(a):
while a < 10000:
a += 1
return a
def g(a):
while a < 10000:
a = a + 1
return a
a = 1
%timeit f(a)
490 µs ± 20.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
a = 1
%timeit g(a)
513 µs ± 34.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)