【问题标题】:Python 2.7 str(055) returns "45" instead of 055 [duplicate]Python 2.7 str(055) 返回“45”而不是 055 [重复]
【发布时间】:2014-01-28 23:38:25
【问题描述】:

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

>>> str(055)
'45'

【问题讨论】:

  • 只输入055 没有str 也会返回45,仅供参考
  • 请注意str(1 2 3) 是一个语法错误,str(asdf) 不会产生'asdf',除非asdf 是一个包含'asdf' 的变量。 str 的参数被评估为普通的 Python 表达式;这不像在某事周围加上引号。

标签: python string python-2.7


【解决方案1】:

055 是一个八进制数,其十进制等效值为45,使用oct 得到正确的输出。

>>> oct(055)
'055'

Syntax for octal numbers 在 Python 2.X 中:

octinteger     ::=  "0" ("o" | "O") octdigit+ | "0" octdigit+

但这只是为了表示的目的,最终它们总是被转换为整数用于存储或计算:

>>> x = 055
>>> x
45
>>> x = 0xff   # HexaDecimal
>>> x
255
>>> x = 0b111  # Binary
>>> x
7
>>> 0xff * 055
11475

注意,在 Python 3.x 中,八进制数现在由 0o 表示。因此,使用055 将引发SyntaxError

【讨论】:

  • 另请注意,在 Python3.x 中不允许带前导零的十进制数字,它们是语法错误。
  • 感谢上帝对 Python3 的更改。不小心把数字读成八进制太容易了
  • 非常感谢。这消除了我的困惑!
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 2017-12-08
  • 1970-01-01
  • 2014-01-21
  • 2019-01-12
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
相关资源
最近更新 更多