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