簡體   English   中英

奇怪的python行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM