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

他の回答がすでに言ったように、それ**は右から左に評価されるからです。これがドキュメントのリンクで、すべての優先順位が説明されています。

于 2009-05-12T20:15:14.070 に答える
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 に答える
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 に答える