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 个回答
1
另外:
2 ** (2 ** 2 ** 2)
无论怎样,结果都是 2 的 16 次方。
这是遵循标准的数学运算规则,比如:234 应该变成 281,而不是 84,所以结果是 2417851639229258349412352,而不是 4096。
5
这个东西要么是从左边开始计算,要么是从右边开始计算。想知道答案的话,可以自己做个实验。
>>> 3 ** 3 ** 3
7625597484987
>>> (3 ** 3) ** 3
19683
>>> 3 ** (3 ** 3)
7625597484987
所以,它是从右边开始计算的。
或者你可以去查文档。可以在谷歌上搜索“python power”,第一个结果是 http://www.python.org/doc/2.5.2/ref/power.html
文档的第二句话是:
因此,在没有括号的情况下,幂运算和一元运算符的计算顺序是从右到左(这并不限制操作数的计算顺序)。
这也证实了实验的结果。
6
2** (2**(2**2))
来自 http://docs.python.org/reference/expressions.html
在同一组的运算符是从左到右进行计算的(除了比较运算符,包括测试,它们的优先级是一样的,也是从左到右计算——具体可以看“比较”这一部分——还有指数运算是从右到左计算的)。