我不了解iadd,imul等就地运营商的目的。
许多操作都有“就地”版本。以下功能 提供比通常更原始的就地操作员访问 语法呢;例如,语句x + = y等于x = operator.iadd(x,y)。另一种说法是z = operator.iadd(x,y)等价于复合语句z = x; ž + = y。
似乎我总是可以互换使用就地或常规操作符。一个比另一个好吗?
答案 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])似乎正确实现(可能在数学上有意义)。如果一个人真的只想修改一个对象而没有收到一个新对象,那么"就地"功能是正确的方法。
两者都不比另一方好。相反,在某些特定情况下,一个人可能比另一个人更受欢迎。