print (-2 ** 2)
应该返回什么?根据我的计算,它应该是4
,但是解释器会返回-4
这个Python的东西或我的数学是那么可怕吗?
答案 0 :(得分:23)
根据docs,**
的优先级高于-
,因此您的代码等同于-(2 ** 2)
。要获得所需的结果,您可以将-2
放入括号中
>>> (-2) ** 2
4
或使用内置pow
function
>>> pow(-2, 2)
4
或math.pow
函数(返回float
值)
>>> import math
>>> math.pow(-2, 2)
4.0
答案 1 :(得分:5)
**
操作在减号之前完成。为了得到预期的结果,你应该做
print ((-2) ** 2)
因此,在功率和一元运算符的未加密集的序列中,运算符从右到左进行求值(这不会限制操作数的求值顺序):
-1**2
得到-1
。< / p>
文档中还提供了完整的detail of operators precedence。您可以看到最后一行是(expr)
,它强制在使用之前评估expr,因此(-2) ** 2 = 4
的结果
答案 2 :(得分:1)
你也可以使用数学库...
math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2
答案 3 :(得分:-1)
Python有一个问题,并没有将-2视为数字。这似乎是设计的,因为它在文档中提到。
-2被解释为 - (2){一元减去正数2}
这通常不会产生问题但是在-a ** 2中**具有更高的优先级 - 因此 - 被解释为一元操作而不是数字-2 ** 2的一部分评估为-2而不是2.