为什么` - (num)**(even_number)`给` - (num ^(even_number))`作为结果?

时间:2016-04-20 04:41:12

标签: python python-2.7

这是我注意到的奇怪事情。

-5 ** 2给出-25和math.pow(-5,2)给出25的任何特殊原因?答案应该是25.那么-25答案的原因是什么?

>>> -5**2
-25
>>> -5**4
-625
>>> 5**2
25
>>> 5**4
625
>>> import math
>>> pow(-5,2)
25
>>> pow(-5,4)
625
>>>

5 个答案:

答案 0 :(得分:4)

在Python中,**运算符的higher precedence运算符比-运算符高,因此在表达式5 ** 2中首先计算,然后否定。您可以先使用括号来应用否定:

>>> -5**2
-25
>>> (-5)**2
25

答案 1 :(得分:3)

这一切都解释为in the documentation

  

权力运算符比左边的一元运算符绑定得更紧密;它比右边的一元运算符更紧密。

     

因此,在功率和一元运算符的未表示序列中,运算符从右到左进行求值(这不会约束操作数的求值顺序): - 1 ** 2得到-1。

答案 2 :(得分:2)

math.pow的{​​{3}}指定它将x提升为y的力量。

因此,math.pow计算(-5)**4。而只写-5**4等同于-1 * 5 **4,因为通过Python中的运算符优先级,一元运算符-的优先级低于幂运算符**

答案 3 :(得分:1)

这是因为python中的运算符优先级。

如果我们查看operator precedence,我们会发现一元运算符-x的优先级低于幂运算符x**y,因此表达式-5**2表示首先将方块应用于5,然后将负号应用于结果。第一个操作给出25,然后给出-25。

表达式math.pow(-5,2)表示将-5平方。这相当于(-5)**2

答案 4 :(得分:1)

因为-运算符的优先级低于幂运算符**。实际上,您的表达式计算如下:

>>> -(5 ** 2)

请尝试以下操作以获得正确的结果:

>>> (-5) ** 2
25

有关详细信息,请阅读python Operator precedence

下表总结了Python中的运算符优先级,从最低优先级(最小绑定)到最高优先级(大多数绑定)。

enter image description here