Python **运算符的关联性是什么?

时间:2010-03-04 21:59:19

标签: python

我正在玩python命令行和**运算符,据我所知,它执行幂函数。所以2 ** 3应该是(并且是)8因为2 * 2 * 2 = 8。

有人可以解释我找到的行为吗?我没有看到任何方法将操作与括号分组以实际获得65536的结果,就像在这里获得的那样。

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

4 个答案:

答案 0 :(得分:6)

2** (2**(2**2))

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

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

答案 1 :(得分:5)

它与左侧或右侧相关联。要自己发现答案,请进行实验。

>>> 3 ** 3 ** 3
7625597484987
>>> (3 ** 3) ** 3
19683
>>> 3 ** (3 ** 3)
7625597484987

因此,它与右边相关联。

或者你可以阅读文档。 google:“python power”,第一个结果是 http://www.python.org/doc/2.5.2/ref/power.html

第二句话是:

  

因此,在一个不明确的序列中   权力和一元运营商,   运营商从右到右进行评估   离开(这不限制   操作数的评估顺序。)

确认实验结果。

答案 2 :(得分:1)

此外:

2 ** (2 ** 2 ** 2)

不管怎样,它变成2 ** 16。

这是遵循标准的数学运算,其中:2 3 4 变为2 81 ,而不是8 4 因此是2417851639229258349412352,而不是4096。

答案 3 :(得分:0)

**运算符是右关联的:

2 ** (2 ** (2 ** 2)) = 2 ** (2 ** 4) = 2 ** 16 = 65536