我正在玩python命令行和**运算符,据我所知,它执行幂函数。所以2 ** 3应该是(并且是)8因为2 * 2 * 2 = 8。
有人可以解释我找到的行为吗?我没有看到任何方法将操作与括号分组以实际获得65536的结果,就像在这里获得的那样。
>>> 2 ** 2 ** 2
16
>>> 2 ** 2 ** 2 ** 2
65536
>>> (2 ** 2 ** 2) ** 2
256
答案 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