由于Python 3中的八进制前缀现在是0o
,因此再写0777
是不合法的。好。
那么为什么写00
来正确评估0
而其他数字触发语法错误是合法的呢?
>>> 01
...
File "<interactive input>", line 1
01
^
SyntaxError: invalid token
>>>
>>> 00
0
答案 0 :(得分:17)
如果要查看Lexical Analysis(整数文字部分)页面:
integer ::= decinteger | bininteger | octinteger | hexinteger decinteger ::= nonzerodigit (["_"] digit)* | "0"+(["_"] "0")* ...
这意味着decinteger
或者以非零数字开头(后跟所有可能的数字和可选的下划线),或者是零序列,带有可选的下划线(映射到零)。
文件还指出:
请注意,非零十进制数中的前导零是不允许。
所以这意味着他们为零做了一个例外(在python-3.3的所有文档中都可以找到):你可以将零写为零序列。我的猜测当然是他们必须包含"0"
(你还有什么指定零作为decinteger
?),那么为什么在这种情况下不允许更多的零,无论数字系统如何,{{ 1}}并且保持为零。他们可能不希望允许000
作为01
来防止意外运行python-2.x代码,从而获得完全不同的结果。
最后请注意,下划线只是该规范的一部分,因为python-3.6 :在specifications for 3.5中,语法中没有提到它们。
在python-2.7 the documentation中指定零后跟其他数字(其他零也作为decinteger
:
octinteger