【问题标题】:Odd behaviour of Python tokenizer when parsing integer numbers解析整数时 Python 标记器的奇怪行为
【发布时间】:2018-04-28 22:47:24
【问题描述】:

我注意到 CPython3 和 Pypy3 的以下事实,与 CPython2 和 Pypy2 的行为形成对比:

在 Python3 中,解析代码时看起来像前导零会产生错误除了一个非常单一的数字,即 0。因此00 有效但042 无效。

在 Python2 中,所有整数都允许前导零。因此00042 是有效的。

为什么 Python 在两个版本之间改变了它的行为?

【问题讨论】:

    标签: python parsing numbers integer token


    【解决方案1】:

    Python 3 标准化了所有整数文字(除了基数 10)的定义方式:0?dddd...,其中 ? 是一个表示基数的单个字母,每个 d 都被解释为相应基数中的一个数字。 0... 被保留为例外,因为 0 在任何基数中都是 0,并且在需要显式基数说明符之前被接受。

    与此相关的最大变化是,带有前导零但没有显式基数说明符的数字不再被假定为八进制数。 Python 2 接受 0420o42 作为十进制 34 的八进制表示。(在 Python 历史的早期,只有三个有效的文字,十六进制是唯一一个带有说明符的文字。0o...0b... 都是后期补充

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多