在 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
有效?
您缺少的是替代方案的
|
符号的优先级最低。因此 decinteger
分为两种不同的可能性:
nonzerodigit (["_"] digit)*
"0"+ (["_"] "0")*
第一个适用于不以
0
开头的数字,它允许数字的其余部分包含任何数字。第二个是以0
开头的数字,它只允许全是0
的数字。两者都允许可选的 _
字符散布在数字之间,以便于阅读。