我正在阅读Python教科书的介绍,并且遇到了这一行:
同一行上的运算符具有相同的优先级,并且从左到右应用,除了从右到左应用的取幂之外。
我理解大部分内容,但我不明白为什么他们说取幂是从右到左应用的。他们也没有提供任何例子。另外,我是否可以提出这样的一般性问题,或者只是解决问题的解决方案?
答案 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
,这是中间步骤 -
2 ** (2 ** (2 ** 2))
2 ** (2 ** (4)) # progressing right to left
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更准确地回答了你的问题,抱歉。我忘了说这是数学惯例。