Python中**运算符的结合性是什么?

7 投票
4 回答
2974 浏览
提问于 2025-04-15 20:01

我刚刚在玩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

在同一组的运算符是从左到右进行计算的(除了比较运算符,包括测试,它们的优先级是一样的,也是从左到右计算——具体可以看“比较”这一部分——还有指数运算是从右到左计算的)。

撰写回答