Python 为什么`-(num)**(偶数)`会给出`-(num^(偶数))`作为结果?

Python 为什么`-(num)**(偶数)`会给出`-(num^(偶数))`作为结果?,python,python-2.7,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 >>> fo

我注意到有点奇怪

为什么-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
>>>
for
math.pow
指定将
x
提升到
y
的幂


因此,
math.pow
计算
(-5)**4
。而仅仅写
-5**4
相当于
-1*5**4
,因为在Python中,一元运算符
-
的优先级低于幂运算符
**

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

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


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

这是因为
-
运算符的优先级低于幂运算符
**
。事实上,您的表达式将按以下方式计算:

>>> -(5 ** 2)
请尝试以下操作以获得正确的结果:

>>> (-5) ** 2
25
有关更多信息,请阅读:

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

这些都解释清楚了

幂运算符比其左边的一元运算符绑定得更紧;它的绑定不如右边的一元运算符紧密

因此,在幂运算符和一元运算符的非递归序列中,运算符从右向左求值(这不限制操作数的求值顺序):-1**2导致-1


在Python中,
**
运算符的值大于
-
运算符的值,因此在表达式中,
5**2
首先求值,然后求反。可以先使用括号应用否定:

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

简单回答:操作顺序请不要将图像作为代码发布,@BhargavRao-会记住这一点。谢谢。请注意,您不需要导入数学,
pow
是一个内置函数。@BurhanKhalid-谢谢您的编辑。我是Python新手。因此,我不知道我不需要导入数学模块。谢谢你送来那张便条。