【问题标题】:Difference between add and iadd?add 和 iadd 的区别?
【发布时间】:2016-09-09 01:29:44
【问题描述】:
我不了解 iadd、imul 等就地运算符的用途。
许多操作都有“就地”版本。以下功能
提供比通常更原始的就地操作符访问
语法可以;例如,语句 x += y 等价于 x =
运算符.iadd(x, y)。另一种说法是说 z =
operator.iadd(x, y) 等价于复合语句 z = x; z
+= y。
似乎我总是可以互换使用就地或常规运算符。一个比另一个好?
【问题讨论】:
标签:
python
python-2.7
operators
【解决方案1】:
不可变对象的“就地”函数不能使用in-place algorithm 实现,而对于可变对象则可以。简单的事实是不可变对象不会改变。
否则,在考虑可变对象时,使用“就地”而不是“就地”函数会产生深远的影响。考虑以下几点:
>>> 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])似乎正确实现(也许在数学上是有意义的)。如果一个人真的只想修改一个对象而不接收一个新对象,那么“就地”功能是正确的方法。
两者都不比另一个更好。相反,在某些特定情况下,可能会优先考虑其中一个。