2024-06-02 08:58:35 发布
网友
我正在进行一些Python活动,并得到了带有以下运算符的示例代码:y *= -1
y *= -1
我浏览了一下relevant Python docs,但没有用。在
我知道y += 1是y = y + 1的缩写。那么这是不是y = y * -1y等于y乘以-1?在
y += 1
y = y + 1
y = y * -1
在Python文档中,我能找到的最接近的东西是:x * y:x和y的乘积
x * y
是这个吗?在
在绝大多数情况下
y *= <expr>
与
但在一般情况下,它被解释为:
y = imul(y, <expr>)
相当于:
y = y.__imul__(<expr>)
如果y的类型重写^{}。在
y
这意味着如果y的类型重写了inplace乘法运算符,y*=<expr>将在内执行,而y=y*<expr>则不执行。在
y*=<expr>
y=y*<expr>
编辑
可能还不清楚为什么需要赋值,也就是说,为什么它是无畏的y = imul(y, <expr>),而不仅仅是imul(y, <expr>)。在
imul(y, <expr>)
原因是,以下两种情况下给出相同的结果非常有意义:
c = a * b
以及
c = a c *= b
现在,如果a和b属于同一类型(例如floats、numpy数组等),这当然可行,但是如果它们不是,则操作的结果可能具有b的类型,在这种情况下,操作不能是a的就地操作,因此需要将结果分配给{},以实现正确的行为。在
a
b
例如,这是可行的,这要归功于任务:
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
是的,没错。它只意味着用左边的值乘以右边的值。它们都是算术运算符,只是在操作和表达式绑定上有所不同,所以我相信在重载中+/*在其他地方都是并行的。在
在绝大多数情况下
与
^{pr2}$但在一般情况下,它被解释为:
相当于:
如果} 。在
y
的类型重写^{这意味着如果
y
的类型重写了inplace乘法运算符,y*=<expr>
将在内执行,而y=y*<expr>
则不执行。在编辑
可能还不清楚为什么需要赋值,也就是说,为什么它是无畏的
y = imul(y, <expr>)
,而不仅仅是imul(y, <expr>)
。在原因是,以下两种情况下给出相同的结果非常有意义:
以及
现在,如果},以实现正确的行为。在
a
和b
属于同一类型(例如floats、numpy数组等),这当然可行,但是如果它们不是,则操作的结果可能具有b
的类型,在这种情况下,操作不能是a
的就地操作,因此需要将结果分配给{例如,这是可行的,这要归功于任务:
而如果删除赋值,
a
将保持不变:是的,没错。它只意味着用左边的值乘以右边的值。它们都是算术运算符,只是在操作和表达式绑定上有所不同,所以我相信在重载中+/*在其他地方都是并行的。在
相关问题 更多 >
编程相关推荐