为什么000在Python 3中评估为0?

时间:2017-03-28 14:11:53

标签: python int literals

由于Python 3中的八进制前缀现在是0o,因此再写0777是不合法的。好。

那么为什么写00来正确评估0而其他数字触发语法错误是合法的呢?

>>> 01
  ...
  File "<interactive input>", line 1
    01
     ^
SyntaxError: invalid token
>>> 
>>> 00
0

1 个答案:

答案 0 :(得分:17)

如果要查看Lexical Analysis(整数文字部分)页面:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+(["_"] "0")*
...

这意味着decinteger或者以非零数字开头(后跟所有可能的数字和可选的下划线),或者是零序列,带有可选的下划线(映射到零)。

文件还指出:

  

请注意,非零十进制数中的前导零是允许。

所以这意味着他们为零做了一个例外(在的所有文档中都可以找到):你可以将零写为零序列。我的猜测当然是他们必须包含"0"(你还有什么指定零作为decinteger?),那么为什么在这种情况下不允许更多的零,无论数字系统如何,{{ 1}}并且保持为零。他们可能不希望允许000作为01来防止意外运行代码,从而获得完全不同的结果。

最后请注意,下划线只是该规范的一部分,因为 :在specifications for 3.5中,语法中没有提到它们。

the documentation中指定零后跟其他数字(其他零也作为decinteger

octinteger