在读取python的Format Specification Mini-Language时,

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

语法真让我困惑。
例如,如果我想将int转换为二进制表示
我能做到
"{0:b}".format(100)
"{:b}".format(100) # but this is fine too, so what dose the 0 do?

我知道b代表了规范中的type部分,但我不知道它们的作用是什么?

最佳答案

您只查看format_spec的语法,指定完整语法higher up on the same page

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"
format_spec       ::=  <described in the next section>

replacement_field语法中,请注意:前面的format_spec
field_name后面可选有一个转换字段,即
前面有一个感叹号和一个感叹号,它是
前面有一个冒号'!'
当指定了format_spec和/或':'时,field_name标记前者的结束和conversion的开始。
在你的例子中,
>>> "{0:b}".format(100)
'1100100'

Zero指定可选的:,在这种情况下,它对应于要在传递的参数元组中格式化的项的索引;它是可选的,因此可以删除。

09-25 16:56