Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python中的增广赋值比常规赋值好?_Python_Syntax - Fatal编程技术网

为什么python中的增广赋值比常规赋值好?

为什么python中的增广赋值比常规赋值好?,python,syntax,Python,Syntax,为什么要使用python代码 a+=1 比 a = a + 1 除了第一个更容易理解和更干净之外 如果python处理每一条语句的方式或每一条语句之间的性能有任何差异,或者我可以使用任何我想要的东西,那么我应该使用它还有其他原因吗。a+=1比a=a+1快一点 请参见示例代码 def f(a): while a < 10000: a += 1 return a def g(a): while a < 10000: a = a

为什么要使用python代码

a+=1

a = a + 1
除了第一个更容易理解和更干净之外
如果python处理每一条语句的方式或每一条语句之间的性能有任何差异,或者我可以使用任何我想要的东西,那么我应该使用它还有其他原因吗。

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)
def(a):
而a<10000:
a+=1
归还
def g(a):
而a<10000:
a=a+1
归还
a=1
%timeit f(a)
每个回路490µs±20.7µs(7次运行的平均值±标准偏差,每个1000个回路)
a=1
%timeit g(a)
每个回路513µs±34.8µs(7次运行的平均值±标准偏差,每个1000个回路)

在您给出的简单示例中,没有什么区别。增广赋值被认为更容易阅读,因为它是一种常见的习惯用法,并且简洁地表达了一种常见的操作

但在某些情况下,它可以起到作用。如果要递增的位置来自复杂表达式或有副作用的表达式,则不希望重复

a[call_expensive_function()] += 1
vs
a[call_expensive_function()] = a[call_expensive_function()] + 1
此外,类型实现的
+=
可能与
+
不同。以下是一个例子:

l1 = [1, 2, 3]
l2 = l1
l1 = l1 + [3, 4]
print(l1) # prints [1, 2, 3, 4, 5]
print(l2) # prints [1, 2, 3]

l3 = [1, 2, 3]
l4 = l3
l1 += [3, 4]
print(l3) # prints [1, 2, 3, 4, 5]
print(l4) # prints [1, 2, 3, 4, 5]

列表通过就地修改列表(如
extend()
方法)实现
+=
,同时
+
创建一个新列表。正如你从上面看到的,如果您对同一个列表有多个引用,这会产生影响。

谁说一个比另一个好?相关问题:好的,那么每个列表之间的区别是什么。每个列表是如何工作的。这个区别来自何处非常感谢您,但似乎有点复杂。如果您不介意看相关的以上链接的问题,将更加详细。