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