这个算子是什么*= -1

Ben*_*eno 7 python

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

我查看了相关的Python文档,但无济于事.

我知道y += 1,例如,它是简称y = y + 1.那么这个y = y * -1y等于y乘以-1可能吗?

在Python文档我能找到最近的事情是这样的:x * y:x和y的产品

是这个吗?

shx*_*hx2 12

在绝大多数情况下

y *= <expr>
Run Code Online (Sandbox Code Playgroud)

是相同的

y = y * <expr>
Run Code Online (Sandbox Code Playgroud)

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

y = imul(y, <expr>)
Run Code Online (Sandbox Code Playgroud)

这相当于:

y = y.__imul__(<expr>)
Run Code Online (Sandbox Code Playgroud)

如果y是类型覆盖__imul__.

这意味着如果y类型覆盖inplace multiplication运算符,y*=<expr>则在原地执行,而y=y*<expr>不是.


编辑

可能不会立即清楚为什么需要分配,即为什么它被定义为y = imul(y, <expr>),而不仅仅是imul(y, <expr>).

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

c = a * b
Run Code Online (Sandbox Code Playgroud)

c = a
c *= b
Run Code Online (Sandbox Code Playgroud)

现在,这门课程的工作,如果ab是同一类型(例如花车,numpy的阵列等),但如果他们都没有,有可能操作的结果具有类型b,在这种情况下,操作不能是就地操作a,因此需要将结果分配给a,以便实现正确的行为.

例如,由于分配,这是有效的:

from numpy import arange
a = 2
a *= arange(3)
a
=> array([0, 2, 4])
Run Code Online (Sandbox Code Playgroud)

如果分配被删除,则a保持不变:

a = 2
imul(a, arange(3))
=> array([0, 2, 4])
a
=> 2
Run Code Online (Sandbox Code Playgroud)

  • @wim然后臭名昭着的元组修改`x =([],)`,`x [0] + = ['a']``x` (2认同)