这是我注意到的奇怪事情。
-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
>>>
答案 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中的运算符优先级,从最低优先级(最小绑定)到最高优先级(大多数绑定)。