Python 2.7 str(055)返回"45"而不是055

use*_*739 4 python string python-2.7

为什么我在python 2.7中得到以下结果,而不是'055'?

>>> str(055)
'45'
Run Code Online (Sandbox Code Playgroud)

Ash*_*ary 11

055是一个八进制数,其十进制等值45,用于oct获得正确的输出.

>>> oct(055)
'055'
Run Code Online (Sandbox Code Playgroud)

Python 2.X中八进制数的语法:

octinteger     ::=  "0" ("o" | "O") octdigit+ | "0" octdigit+
Run Code Online (Sandbox Code Playgroud)

但这仅用于表示目的,最终它们总是转换为整数以进行存储或计算:

>>> x = 055
>>> x
45
>>> x = 0xff   # HexaDecimal
>>> x
255
>>> x = 0b111  # Binary
>>> x
7
>>> 0xff * 055
11475
Run Code Online (Sandbox Code Playgroud)

请注意,在Python 3.x中,八进制数现在由0o.表示.所以,使用055那里会提高SyntaxError.

  • 感谢上帝对Python3的改变.很容易意外地将数字读成八进制数 (2认同)