使用pow运算符计算错误

17

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


你应该执行 (-2)**2 而不是。 - sshashank124
2
“-” 的优先级低于 “”。这被解释为 -(22),而不是 (-2)**2... - l4mpi
2
大多数人感到困惑的主要原因是他们期望-2是一个字面意思为“负2”的表达式,而不是在运行时应用否定运算符到字面值2的表达式。一旦你理解了它是一个运算符,那么它是一个优先级问题这个事实就很明显了;在此之前,它是令人困惑的。(这就是为什么所有遇到这个问题的人都会对-2 ** 2感到困惑,而不是-x ** 2。) - abarnert
在数学中,-x² 是负数或零,因为指数具有更高的优先级。-2² 也是负数。Python 是正确的。 - phuclv
4个回答

28
根据文档**的优先级高于-,因此您的代码等价于-(2 ** 2)。要获得所需的结果,您可以将-2放入括号中。
>>> (-2) ** 2
4

或使用内置的pow函数

>>> pow(-2, 2)
4

或者math.pow函数(返回float值)

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

6
< p > 在减法之前执行 ** 操作。为了得到预期的结果,你应该这样做

print ((-2) ** 2)

来自文档

因此,在幂和一元运算符的未加括号的序列中,运算符从右到左进行评估(这不会约束操作数的评估顺序):-1**2 的结果为 -1

完整的运算符优先级详细信息也可以在文档中找到。您可以看到最后一行是(expr),这强制对表达式求值然后再使用它,因此 (-2) ** 2 = 4 的结果为4。


1

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

(保留HTML标签)
math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2

-2

Python存在一个问题,无法将-2视为数字。文档中提到,这似乎是设计上的问题。

-2被解释为-(2) {一元减号变成正数2}

通常这不会有问题,但在-a ** 2中,**的优先级高于-,因此将-解释为一元运算符而不是数字的一部分,-2 ** 2的计算结果为-2而不是2。


这不是Python的问题,这就是数学的工作原理。 - Asocia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接