繁体   English   中英

就地分配和再次使用变量名称进行分配有什么区别?

[英]What's the difference between in-place assignment and assignment using the variable's name again?

在Python中,为变量赋值时,我们可以执行以下操作:

variable = variable + 20

要么

variable += 20

虽然我确实知道这两种操作在语义上是相同的,即它们达到了将variable的先前值增加20的相同目标,但我想知道两者之间是否存在细微的运行时性能差异,或其他任何细微差异这可能认为一个比另一个更好。 有什么区别,还是完全一样? 如果有任何区别,其他语言(例如C ++)是否一样?

谢谢。

也许这可以帮助您更好地理解:

import dis

def a():
  x = 0
  x += 20
  return x

def b():
  x = 0
  x = x + 20
  return x

print 'In place add'
dis.dis(a)

print 'Binary add'
dis.dis(b)

我们得到以下输出:

In place add
  4           0 LOAD_CONST               1 (0)
              3 STORE_FAST               0 (x)

  5           6 LOAD_FAST                0 (x)
              9 LOAD_CONST               2 (20)
             12 INPLACE_ADD         
             13 STORE_FAST               0 (x)

  6          16 LOAD_FAST                0 (x)
             19 RETURN_VALUE        

Binary add
  9           0 LOAD_CONST               1 (0)
              3 STORE_FAST               0 (x)

 10           6 LOAD_FAST                0 (x)
              9 LOAD_CONST               2 (20)
             12 BINARY_ADD          
             13 STORE_FAST               0 (x)

 11          16 LOAD_FAST                0 (x)
             19 RETURN_VALUE        

您可以使用计时器比较性能来进行一千次左右的循环,但主要区别在于。 我想二进制添加应该更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM