为什么 00 在 Python 中是有效整数?

问题描述 投票:0回答:1

Python 文档中

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

我不明白为什么

00
是具有这些定义的有效整数?不过,似乎
nonzerodigit
必须是前导数字:

>>> isinstance(00, int)
True

也许还有同样的问题:为什么

0
有效?

python integer pattern-matching
1个回答
1
投票

您缺少的是替代方案的

|
符号的优先级最低。因此
decinteger
分为两种不同的可能性:

  • nonzerodigit (["_"] digit)*
  • "0"+ (["_"] "0")*

第一个适用于不以

0
开头的数字,它允许数字的其余部分包含任何数字。第二个是以
0
开头的数字,它只允许全是
0
的数字。两者都允许可选的
_
字符散布在数字之间,以便于阅读。

© www.soinside.com 2019 - 2024. All rights reserved.