7

我很无聊,正在玩 ipython 控制台,遇到了以下我不太明白的行为

In [1]: 2**2
Out[1]: 4

In [2]: 2**2**2
Out[2]: 16

In [3]: 2**2**2**2
Out[3]: 65536

In [4]: 2**2**2**2**2 

[4] 的答案不是4294967296L,这是一个很长的数字,但我真的不知道为什么。

该号码可以在这里找到:http: //pastie.org/475714

(Ubuntu 8.10、python 2.5.2、ipython 0.8.4)
(Mac OS X 10.5.6、Python 2.5.1)

4

5 回答 5

16

Python 在数学幂运算上从右到左。例如,IN[2] 正在做:

2**(4) = 16

IN[3] = 2 2 2 2 = 2 2**(4) = 2**16 = 65536

如果要从左到右计算,则需要括号。OUT[4] 没有输出你想要的答案的原因是因为这个数字是天文数字,Python 无法打印出来。

2^65536 = 非常巨大

于 2009-05-12T15:42:53.783 回答
7

** 运算符的优先级使评估从右到左进行(而不是预期的从左到右)。换句话说:

2**2**2**2 == (2**(2**(2**2)))
于 2009-05-12T15:44:27.243 回答
4

这是因为 Python 中的优先顺序导致该等式从右到左进行计算。

>>> 2**2
4
>>> 2**2**2
16
>>> 2**(2**2)
16
>>> 2**2**2**2
65536
>>> 2**2**(2**2)
65536
>>> 2**(2**(2**2))
65536
>>> 2**2**2**2**2
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**2**(2**2)
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**(2**(2**2))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**(2**(2**(2**2)))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**255
57896044618658097711785492504343953926634992332820282019728792003956564819968L
于 2009-05-12T15:45:34.213 回答
4

正如其他答案已经说过的那样,这是因为**从右到左评估。这是文档链接,其中描述了所有优先级。

于 2009-05-12T20:15:14.070 回答
3

从右到左评估,让我们看一下 Python 为获得这些答案所经历的步骤:

2**2
4

2**(2**2)
2**(4)
16

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

2**(2**(2**(2**2)))
2**(2**(2**(4)))
2**(2**(16))
2**(65536)
2.0035299304068464649790723515603e+19728
于 2009-05-12T15:46:16.757 回答