uint:为什么 -(a*b) 不同于 -a*b

uint: Why is -(a*b) different from -a*b

除了最后一个我都明白了:

import numpy as np
a = np.array(5).astype('uint16')

a
Out[24]: array(5, dtype=uint16)

-a
Out[25]: 65531

a*1.
Out[26]: 5.0

-(a*1.)
Out[27]: -5.0

0-a*1.
Out[28]: -5.0

-a*1.
Out[29]: 65531.0

type(a*1.)
Out[30]: numpy.float64

在最后一行中,一个 uint 变量与一个浮点数相乘得到一个浮点数,那么为什么 -a*1. 的结果不是 -5.0,这与 -(a*1.)0-a*1.?

我认为是操作顺序的问题: -a*1. 是从左到右,但是 0-a*1. 它是一个减法(即使它是零)并且 0- 应用 after a*1.(对象类型改变的地方)。

-a*1.(-a)*1.,因为一元 - 有一个 higher precedence than *. For details, look at the excerpts from the Python grammar in the documentation.