我不明白 iadd、imul 等就地运算符的用途。
许多操作都有“就地”版本。以下功能
为就地运算符提供比通常更原始的访问
语法确实如此;例如,语句 x += y 相当于 x =
运算符.iadd(x, y)。另一种表达方式是 z =
operator.iadd(x, y) 等价于复合语句 z = x; z
+ = y。
似乎我总是可以互换使用就地运算符或常规运算符。这个比那个好吗?
不可变对象的“就地”函数不能使用就地算法,而对于可变对象则可能是。简单的事实是,不可变的对象不会改变。
否则,在考虑可变对象时,使用“就地”函数与非“就地”函数会产生深远的影响。考虑以下:
>>> 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])已正确实现(也许在数学上是有意义的)。如果确实只想修改一个对象而不接收新对象,那么“就地”函数是正确的选择。
两者都不比另一个更好。相反,在某些特定情况下,其中一种可能会优于另一种。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)