Python documentation:

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.两者都允许可选的_个字符散布在数字之间,以便于阅读.

因此,第二次生成时允许将000000等作为有效的十进制整数.它们的值都是零.

一些EBNF文档将替代品放在单独的行中,以便更容易看到故障.Python文档 Select 了这种更紧凑的格式.

Python相关问答推荐

将整组数组拆分为最小值与最大值之和的子数组

删除最后一个pip安装的包

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

多指标不同顺序串联大Pandas 模型

用渐近模计算含符号的矩阵乘法

matplotlib + python foor loop

幂集,其中每个元素可以是正或负""""

人口全部乱序 - Python—Matplotlib—映射

Polars Group by描述扩展

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

以异步方式填充Pandas 数据帧

在电影中向西北方向对齐""

有没有办法让Re.Sub报告它所做的每一次替换?

ModuleNotFoundError:Python中没有名为google的模块''

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

Polars时间戳同步延迟计算

使用xlsxWriter在EXCEL中为数据帧的各行上色

Python:在cmd中添加参数时的语法

Pandas:根据相邻行之间的差异过滤数据帧

如何有效地计算所有输出相对于参数的梯度?