22

Pythonインタープリターで次のプログラムを実行しました。

>>> def mylife(x):
...     if x>0:
...             print(x)
...     else:
...             print(-x)
... 
>>> mylife(01)
File "<stdin>", line 1
mylife(01)
        ^
SyntaxError: invalid token
>>> mylife(1)
1
>>> mylife(-1)
1
>>> mylife(0)
0

今、私はこれを見ましたが、リンクが言うように、8 進数の 0 は Python ではもう機能しません (つまり、python3 では機能しません)。しかし、それは、0 で始まる数値の振る舞いを適切に解釈する必要があるということではないでしょうか? 基数 2 または通常の基数 10 表現のどちらか? そうではないのに、なぜ python はそのように振る舞うのでしょうか? 実装の問題ですか?それともセマンティックの問題ですか?

4

2 に答える 2

32

私の推測では012、python3.xでは8進数のリテラル定数ではなくなった012ため、奇妙な下位互換性のバグを回避するために構文を許可していませんでした。8進数のリテラル定数を使用するpython2.xスクリプトについて考えてみます。

a = 012 + 013

次に、それをpython 3に移植しますが、それでも機能します。以前の予想(10進数)a = 25ではなく、単に提供されます。a = 21そのバグを追跡して楽しんでください。

于 2012-10-22T14:33:39.980 に答える
15

Python 3 リリース ノートからhttp://docs.python.org/3.0/whatsnew/3.0.html#integers

8 進リテラルはもはや形式ではありません0720。代わりに使用0o720します。

Python 2.x の 8 進リテラルの「先行ゼロ」構文は、よくある落とし穴でした。

Python 2.7.3
>>> 010
8

あなたが発見したように、Python 3.xでは構文エラーです:

Python 3.3.0
>>> 010
  File "<stdin>", line 1
    010
      ^
SyntaxError: invalid token

これまでと同じように、先頭にゼロがある文字列から変換できます。

>>> int("010")
10
于 2013-04-09T18:17:09.367 に答える