2013-08-07 71 views
4

我想先从这里询问一下。这是作为codeacademy.com练习的一部分给我的,并且让我困惑了一个多小时。需要对Python中的**运算符进行一些说明

看看下面的代码块:

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

现在,我评价为为 “8> = 16”,这是假。

但是,codeacademy.com终端说它是真的。当我开始编写调试代码行时,我发现问题在于如何评估“-4 ** 2”。当我在CodeAcademy的终端以及我的本地linux系统上运行它时,Python中的“-4 ** 2”出现在“-16”......这与的所有内容相反我已经在所有的数学课以及我已经运行过的每一台计算器。无论我运行它为“-4 * -4”还是“-4^2”,或者甚至使用“x^y”键,“-4 [x^y] 2”,它仍然仍然作为“ 16" 。那么,python如何以“-16”出现“-4 ** 2”?

有人可以澄清这一点对我吗?

TIA。

+0

'(-4)** 2!= -4 ** 2'。 '-4 ** 2 == - (4 ** 2)== -16'。记住你的操作顺序。乘幂在乘法之前。 – wflynny

回答

3

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

希望有帮助!

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

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

,你可以看到,-少优先级比**

1

Python不评估它为(-4)^ 2它评估它为 - (4^2)。

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

Power Operator该文档:

功率操作者结合比其 左边一元运算符更紧密;它与右侧的一元运算符的绑定更紧密。所述 语法是:

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

因此,在功率和一元运算符的括号的序列,的运营商都从右到左评价(这不限制为操作数的评价顺序):-1 * * 2的结果为-1。

强调我的。

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

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

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

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

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