需要对Python中的**运算符进行一些澄清

时间:2013-08-07 18:00:23

标签: python operators

我想先问一下这个问题。这是作为codeacademy.com练习的一部分给我的,让我在一小时的大部分时间里感到困惑。

查看以下代码块:

bool_one = 40 / 20 * 4 >= -4**2

现在,我评估为" 8> = 16"这是假的。

然而,codeacademy.com终端表示它是真的。当我开始编写调试代码行时,我发现问题出在" -4 ** 2"得到评估。当我在CodeAcademy的终端以及我的本地linux系统上运行时," -4 ** 2"在Python中出现了" -16" ...这与我在所有数学课程中学到的所有相反,以及我运行它的每一个计算器。我是否将其作为" -4 * -4"或" -4 ^ 2"甚至,使用" x ^ y"键," -4 [x ^ y] 2",仍然出现为" 16"。那么,python是如何与" -16" for" -4 ** 2"?

有人可以帮我澄清一下吗?

TIA。

4 个答案:

答案 0 :(得分:6)

来自Power Operator的文件:

  

电力运营商比其上的一元运营商绑定得更紧密   剩下;它比右边的一元运算符更紧密。该   语法是:

power ::=  primary ["**" u_expr]
     

因此,在功率和一元运算符的未表示序列中,运算符从右到左进行评估(这不会限制操作数的评估顺序): - 1 ** 2导致-1

强调我的。

因此,要获得所需的结果,您需要在-4附近添加括号。

>>> (-4) ** 2
16

答案 1 :(得分:3)

如果你有-4没有括号,则负号被认为是一元运算符,基本上是"乘以负数。" (-4)**2将为16,因为这实际上是负4平方,但-4**2使用正常的操作顺序(乘法前取幂)并将其视为-(4**2)

希望有所帮助!

编辑:要真正理解运算符优先级,请查看文档中的这个方便的列表:

http://docs.python.org/2/reference/expressions.html#operator-precedence

如您所见,-的优先级低于**

答案 2 :(得分:1)

Python并未将其评估为(-4)^ 2它将其评估为 - (4 ^ 2)。

>>> (-4)**2
16
>>>-4**2
-16

答案 3 :(得分:0)

-4 ** 2表示 - (4 ^ 2)。 首先,4是平方然后乘以-1。 -1(4 ^ 2)= -1(16)= -16。

如果您想要16作为答案,那么您必须输入(-4)** 2。

>>> -4**2
-16
>>> (-4)**2
16