这个算子是什么* = -1

时间:2013-05-22 04:53:48

标签: python

我正在进行一些Python活动,并使用此运算符给出了示例代码:y *= -1

我查看relevant Python docs,但无济于事。

我知道y += 1例如是y = y + 1的缩写。那么y = y * -1 y等于y乘以-1可能吗?

我能找到的Python文档中最接近的一点是:x * y x和y的产品

这是吗?

2 个答案:

答案 0 :(得分:12)

在绝大多数情况下

y *= <expr>

相同
y = y * <expr>

但在一般情况下,它被解释为:

y = imul(y, <expr>)

然后相当于:

y = y.__imul__(<expr>)

如果y的类型覆盖__imul__

这意味着,如果y的类型会覆盖 inplace 乘法运算符,则y*=<expr>将执行 inplace ,而y=y*<expr>不是。


修改

可能不会立即清楚为什么需要分配,即为什么将其归为y = imul(y, <expr>),而不仅仅是imul(y, <expr>)

原因是以下两种情况给出相同的结果很有意义:

c = a * b

c = a
c *= b

现在,如果ab属于同一类型(例如浮点数,numpy数组等),这当然有效,但如果不是,则结果可能类型为b的操作,在这种情况下,操作不能是a的就地操作,因此需要将结果分配给a,以实现正确的行为。

例如,由于分配:

,这是有效的
from numpy import arange
a = 2
a *= arange(3)
a
=> array([0, 2, 4])

如果删除了作业,a保持不变:

a = 2
imul(a, arange(3))
=> array([0, 2, 4])
a
=> 2

答案 1 :(得分:3)

是的,这是正确的。它只是意味着将左手值乘以右手值。它们都是算术运算符,只是通过操作和表达式绑定而不同,所以我相信+ / *在重载中的其他地方都是并行的。

y = y * -1