我正在进行一些Python活动,并使用此运算符给出了示例代码: y *= -1
我查看了相关的Python文档,但无济于事.
我知道y += 1
,例如,它是简称y = y + 1
.那么这个y = y * -1
y等于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)
现在,这门课程的工作,如果a
和b
是同一类型(例如花车,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)
归档时间: |
|
查看次数: |
963 次 |
最近记录: |