add和iadd之间的区别?

时间:2016-09-09 01:29:45

标签: python python-2.7 operators

我不了解iadd,imul等就地运营商的目的。

  

许多操作都有“就地”版本。以下功能   提供比通常更原始的就地操作员访问   语法呢;例如,语句x + = y等于x =   operator.iadd(x,y)。另一种说法是z =   operator.iadd(x,y)等价于复合语句z = x; ž   + = y。

似乎我总是可以互换使用就地或常规操作符。一个比另一个好吗?

1 个答案:

答案 0 :(得分:6)

"就地"不可变对象的函数不能使用in-place algorithm实现,而对于可变对象,它们可以是。{3}}。简单的事实是,不可改变的对象不会改变。

否则,使用"就地"而不是"就地"在考虑可变对象时,函数具有深刻的影响。请考虑以下事项:

>>> A = [1,2,3]
>>> B = A
>>> id(A)
4383125944
>>> id(B)
4383125944
>>> A = A + [1]
>>> id(A)
4383126376
>>> A += [1]
>>> id(A)
4383126376

假设您正在编写一些代码,其中假设B是A(可变对象)的软拷贝。不使用"就地"修改A时的功能,可以悄悄地错过对B的所需修改。更糟糕的是,对代码的快速视觉检查使得代码(例如,A = A + [2])似乎正确实现(可能在数学上有意义)。如果一个人真的只想修改一个对象而没有收到一个新对象,那么"就地"功能是正确的方法。

两者都不比另一方好。相反,在某些特定情况下,一个人可能比另一个人更受欢迎。