【问题标题】: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])似乎正确实现(也许在数学上是有意义的)。如果一个人真的只想修改一个对象而不接收一个新对象,那么“就地”功能是正确的方法。

两者都不比另一个更好。相反,在某些特定情况下,可能会优先考虑其中一个。

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2018-05-08
    相关资源
    最近更新 更多