为什么取幂适用于左?

时间:2017-11-22 08:00:38

标签: python python-3.x operators exponentiation

我正在阅读Python教科书的介绍,并且遇到了这一行:

  

同一行上的运算符具有相同的优先级,并且从左到右应用,除了从右到左应用的取幂之外。

我理解大部分内容,但我不明白为什么他们说取幂是从右到左应用的。他们也没有提供任何例子。另外,我是否可以提出这样的一般性问题,或者只是解决问题的解决方案?

3 个答案:

答案 0 :(得分:5)

**运算符跟随normal mathematical conventions;它是正确联想的:​​

  

在通常的计算机科学术语中,数学中的幂运算是右关联的,这意味着x y z 应该被理解为x (y z ,而不是(x y z 。在充分认真解决这个问题的BODMAS规则的阐述中,规则是首先评估顶部指数。

Wikipedia on the Order of Operations

  

如果用叠加符号表示取幂,通常的规则是从上到下工作,因为指数在数学中是右关联的。

因此2 ** 3 ** 4计算为2 ** (3 ** 4)(== 2417851639229258349412352)而非(2 ** 3) ** 4(== 4096)。

这在编程语言中非常普遍;它被称为右关联性,虽然例外,Excel和MATLAB是最值得注意的。

答案 1 :(得分:2)

来自http://docs.python.org/reference/expressions.html

同一个框组中的操作符从左到右(除了比较,包括测试,它们都具有相同的优先级和从左到右的链 - 参见比较 - 和取幂,从右到左分组)。

>>> 2 ** 2 ** 2
16
>>> 2 ** 2 ** 2 ** 2
65536
>>> (2 ** 2 ** 2) ** 2
256

对于中间案例2 ** 2 ** 2 ** 2,这是中间步骤 -

  1. 细分为2 ** (2 ** (2 ** 2))
  2. 2 ** (2 ** (4)) # progressing right to left
  3. 2 ** (16) # this is 2 to the power 16 最终逃到65536 希望有所帮助!

答案 2 :(得分:0)

这个解释对我来说非常清楚。让我向您展示一个可能启发这个的例子:

print 2 ** 2 ** 3 # prints 256

如果你从左到右阅读,你首先会2 ** 2,这将导致4,然后是4 ** 3,这将给我们64。 我们似乎有一个错误的答案。 :)

然而,从右到左...... 你首先要做2 ** 3,这将是8,然后是2 ** 8,给我们256!

我希望我能够为你启发这一点。 :)

编辑:Martijn Pieters更准确地回答了你的问题,抱歉。我忘了说这是数学惯例。