问题:为什么 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”八位数字+

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐