这个运算符是什么?=1

2024-06-02 08:58:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行一些Python活动,并得到了带有以下运算符的示例代码:y *= -1

我浏览了一下relevant Python docs,但没有用。在

我知道y += 1y = y + 1的缩写。那么这是不是y = y * -1y等于y乘以-1?在

在Python文档中,我能找到的最接近的东西是:x * yx和y的乘积

是这个吗?在


Tags: 代码文档示例docs运算符乘积relevant
2条回答

在绝大多数情况下

y *= <expr>

^{pr2}$

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

y = imul(y, <expr>)

相当于:

y = y.__imul__(<expr>)

如果y的类型重写^{}。在

这意味着如果y的类型重写了inplace乘法运算符,y*=<expr>将在内执行,而y=y*<expr>则不执行。在


编辑

可能还不清楚为什么需要赋值,也就是说,为什么它是无畏的y = imul(y, <expr>),而不仅仅是imul(y, <expr>)。在

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

c = a * b

以及

c = a
c *= b

现在,如果ab属于同一类型(例如floats、numpy数组等),这当然可行,但是如果它们不是,则操作的结果可能具有b的类型,在这种情况下,操作不能是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

是的,没错。它只意味着用左边的值乘以右边的值。它们都是算术运算符,只是在操作和表达式绑定上有所不同,所以我相信在重载中+/*在其他地方都是并行的。在

y = y * -1

相关问题 更多 >