使用python时签名';s**运算符和*运算符
即使我们在做同样的事情,也存在符号问题。有人能解释为什么会发生这种情况吗?根据,一元否定的优先级低于使用python时签名';s**运算符和*运算符,python,python-2.7,math,sign,Python,Python 2.7,Math,Sign,即使我们在做同样的事情,也存在符号问题。有人能解释为什么会发生这种情况吗?根据,一元否定的优先级低于**运算符。这就是为什么首先计算5**4,然后应用一元求反 因此,表达式-5**4计算为,-(5**4),即-(625) 相反,首先计算-5,然后应用求幂(***)运算符,您将得到预期的结果 >>> -5**4 -625 >>> -5*-5*-5*-5 625 要查看内部实际发生的情况,可以将表达式拆分为两部分。将4赋值给变量,并在表达式中使用它,然后反汇编
**
运算符。这就是为什么首先计算5**4
,然后应用一元求反
因此,表达式-5**4
计算为,-(5**4)
,即-(625)
相反,首先计算-5
,然后应用求幂(***
)运算符,您将得到预期的结果
>>> -5**4
-625
>>> -5*-5*-5*-5
625
要查看内部实际发生的情况,可以将表达式拆分为两部分。将
4
赋值给变量,并在表达式中使用它,然后反汇编字节码
>>> -5**4
-625
>>> (-5)**4
625
正如我们在这里看到的,首先5
和变量a
处的值用于二元幂
运算,并对其结果应用一元负
但是当您首先评估-5
时
>>> dis(compile('a=4;-5**a', 'string', 'exec'))
1 0 LOAD_CONST 0 (4)
3 STORE_NAME 0 (a)
6 LOAD_CONST 1 (5)
9 LOAD_NAME 0 (a)
12 BINARY_POWER
13 UNARY_NEGATIVE
14 POP_TOP
15 LOAD_CONST 2 (None)
18 RETURN_VALUE
BINARY\u POWER
操作是在-5
上完成的,变量a
上的值是您正在比较的-(5**4)和(-5)**4,我看不出有问题
>>> dis(compile('a=4;(-5)**a', 'string', 'exec'))
1 0 LOAD_CONST 0 (4)
3 STORE_NAME 0 (a)
6 LOAD_CONST 1 (-5)
9 LOAD_NAME 0 (a)
12 BINARY_POWER
13 POP_TOP
14 LOAD_CONST 2 (None)
17 RETURN_VALUE