print(-2 ** 2)
应该会返回什么值?根据我的计算,它应该是4
,但解释器返回-4
。
这是Python的问题还是我的数学太差了?
**
操作。为了得到预期的结果,你应该这样做
print ((-2) ** 2)
来自文档:
因此,在幂和一元运算符的未加括号的序列中,运算符从右到左进行评估(这不会约束操作数的评估顺序):
-1**2
的结果为-1
。
完整的运算符优先级详细信息也可以在文档中找到。您可以看到最后一行是(expr)
,这强制对表达式求值然后再使用它,因此 (-2) ** 2 = 4
的结果为4。
你也可以使用数学库...
(保留HTML标签)math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2
Python存在一个问题,无法将-2视为数字。文档中提到,这似乎是设计上的问题。
-2被解释为-(2) {一元减号变成正数2}
通常这不会有问题,但在-a ** 2中,**的优先级高于-,因此将-解释为一元运算符而不是数字的一部分,-2 ** 2的计算结果为-2而不是2。
-2
是一个字面意思为“负2”的表达式,而不是在运行时应用否定运算符到字面值2的表达式。一旦你理解了它是一个运算符,那么它是一个优先级问题这个事实就很明显了;在此之前,它是令人困惑的。(这就是为什么所有遇到这个问题的人都会对-2 ** 2
感到困惑,而不是-x ** 2
。) - abarnert-2²
也是负数。Python 是正确的。 - phuclv