[英]Strange python behaviour
我很無聊,正在玩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)
Python在數學冪運算上從右到左。 例如,IN [2]在做:
2 **(4)= 16
IN [3] = 2 2 2 2 = 2 2 **(4)= 2 ** 16 = 65536
如果要從左到右進行計算,則需要括號。 OUT [4]不輸出所需答案的原因是因為該數字是天文數字,Python無法將其打印出來。
2 ^ 65536 =極大
**運算符的優先級使評估從右到左(而不是預期的從左到右)進行。 換一種說法:
2**2**2**2 == (2**(2**(2**2)))
這是因為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
正如其他答案已經說過的,這是因為**
是從右到左求值的。 這是文檔鏈接 ,其中描述了所有優先級。
從右到左評估,讓我們看一下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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.