pow运算符计算错误

18 投票
4 回答
1935 浏览
提问于 2025-04-18 07:05

代码 print (-2 ** 2) 应该返回什么呢?根据我的计算,它应该是 4,但是解释器却返回了 -4
这是Python的问题,还是我的数学太差了呢?

4 个回答

-2

Python有个问题,它不把-2当作一个数字来看。这似乎是故意设计的,文档里也提到过。

-2被理解为-(2),也就是把正数2变成负数的意思。

通常这不会造成问题,但在表达式-a ** 2中,**这个符号的优先级比-高。所以这里的-被当作一元运算符,而不是数字-2的一部分,结果是-2 ** 2的计算结果是-2,而不是2。

1

你也可以使用数学库...

math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2
6

在计算中,**这个操作会比减法先进行。所以如果你想得到预期的结果,你应该这样做:

print ((-2) ** 2)

根据文档

在没有括号的情况下,幂运算和一元运算符的计算顺序是从右到左的(这并不影响操作数的计算顺序):-1**2的结果是-1

文档中还有关于运算符优先级的详细信息可供参考。你可以看到最后一行是(expr),这意味着这个表达式会在使用之前先被计算,所以(-2) ** 2 = 4的结果是4。

29

根据文档,在运算符的优先级中,**的优先级比-高,所以你的代码实际上是-(2 ** 2)。如果你想得到想要的结果,可以把-2放在括号里。

>>> (-2) ** 2
4

或者可以使用内置的pow函数

>>> pow(-2, 2)
4

或者使用math.pow函数(这个函数返回的是float类型的值)。

>>> import math
>>> math.pow(-2, 2)
4.0

撰写回答