奇怪的python行为

时间:2009-05-12 15:36:58

标签: python ipython

我很无聊并且在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)

5 个答案:

答案 0 :(得分:16)

Python在数学动力操作上一直向左。例如,IN [2]正在执行:

2 **(4)= 16

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

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

2 ^ 65536 =非常巨大

答案 1 :(得分:7)

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

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

答案 2 :(得分: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

答案 3 :(得分:4)

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

答案 4 :(得分: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