如何阅读 python 字符串格式化语法?

How to read the python string formatting grammar?

python 文档有关于 formatting strings 语法的信息,但是我似乎找不到关于如何阅读定义替换字段语法的 table 的信息.

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s" | "a"
format_spec       ::=  <described in the next section>

format specification section中也有类似的table。

我理解 table 的部分内容,例如 ::= 分隔 definiendum 和 definien,引号内的字符是文字​​,而 | 表示 "or",但是table 的其余部分逃脱了我。

这种格式就是所谓的 Backus-Naur 格式。 More information found on BNF here. BNF基本上就是一套推导规则

定义符号:

  • 除元符号 ::=、| 和 class 名称外,<,> 中的封闭名称都是所定义语言的符号(例如,此 Python 示例)
  • 元符号 ::= 将被解释为 "is defined as"
  • 的|用于分隔替代定义并解释为 "or"
  • 元符号 <,> 是包含 class 名称的定界符。

稍微剖析此示例以帮助您入门:

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*

replacement_field由可选的field_name、可选的conversion和可选的format_spec组成。方括号([ 和 ]'s)表示 可选参数.

如果您确实将 field_name 传递给 replacement_field,它包含一个 arg_name 函数,您可以在其中传递 attribute_name element_index。注意 element_index 是强制性的,因为括号在引号中,因此转义 BNF 形式为可选。