为什么 000 在 Python 3 中计算为 0? [复制]
问题:为什么 000 在 Python 3 中计算为 0? [复制] 由于八进制前缀现在在 Python 3 中是0o,因此不再编写0777是不合法的。好的。 那么为什么编写正确评估为0而其他数字触发语法错误的00是合法的呢? >>> 01 ... File "<interactive input>", line 1 01 ^ SyntaxError: invalid token >>> >>>
问题:为什么 000 在 Python 3 中计算为 0? [复制]
由于八进制前缀现在在 Python 3 中是0o
,因此不再编写0777
是不合法的。好的。
那么为什么编写正确评估为0
而其他数字触发语法错误的00
是合法的呢?
>>> 01
...
File "<interactive input>", line 1
01
^
SyntaxError: invalid token
>>>
>>> 00
0
解答
如果看一下Lexical Analysis(Integer Literal Section) 页面:
整数 ::u003d 十整数 |整数 |八进制 |六角整数
十整数 ::u003d nonzerodigit ([""] 数字)* | "0"+([""] "0")*
...
这意味着decinteger
要么以非零数字开头(后跟所有可能的数字和可选的下划线),要么是带有可选下划线的零序列(映射到零)。
该文件还指出:
请注意,非零十进制数中的前导零是**不允许的。
所以这意味着他们对零做了一个例外(在python-3.3的所有文档中都可以找到):您可以将零写为一系列零。我的猜测是,它们当然必须包括"0"
(否则你如何将零指定为decinteger
?),那么为什么在这种情况下不允许更多的零,不管数字系统如何,000
是并且保持为零。他们可能不想让01
作为decinteger
以防止意外运行python-2.x代码,从而获得完全不同的结果。
最后请注意,下划线只是该规范的一部分,因为python-3.6:在规范中 3.5的语法中没有提到它们。
在python-2.7文档中指定一个零,后跟其他数字(还有其他零作为octinteger
:
整数 ::u003d 十进制整数 |八进制 |六角整数 |二进制整数
十进制整数 ::u003d 非零位 digit* | “0”
八进制数 ::u003d "0" ("o" | "O") octdigit+ | “0”八位数字+
更多推荐
所有评论(0)