为什么在python中,增强赋值比常规赋值更好



为什么这个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 += 1a = 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)

最新更新