Python 字符串格式化详参

来源docs

{} 包裹的是替换域,{% raw %} {{}} {% endraw %} 可用来 escape。

语法

替换域 ::=  "{" [域名] ["!" 转换] [":" 格式] "}"
域名   ::=  参数名 ("." 属性名 | "[" 索引 "]")*
参数名 ::=  [关键字 | 数字]
属性名 ::=  关键字
索引   ::=  数字 | 索引字符串
索引   ::=  <任何字符除了 "]"> +
转换   ::=  "r" | "s" | "a"
格式   ::=  <如下介绍>

参数名要么是关键字(keyword=“…”)要么是数字(标识第几个参数,3.1中默认可忽略)。 参数名后可加 .属性名getattr())或 [索引]__getitem__())。

转换域进行格式化之前的强制类型转换(而不是默认的__format__())。!s 调用 str()!r 调用 repr()!a 调用 ascii()

格式域控制字段宽度,对齐,填充,小数精度等。依据是每种类型自己定义的微语言。格式域可嵌套但只能包含域名。大多数内置类型支持默认的微语言:

格式 ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill     ::=  <填充字符除了 '{' or '}'>
align ::=  "<" | ">" | "=" | "^"
sign  ::=  "+" | "-" | " "
width ::=  integer
precision ::=  integer
type ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

align:左对齐,右对齐,填充符号和数字间,居中。

sign:正数前+负数前-,正数前无负数前-,正数前空格负数前-。

#:整数、浮点数、复数和 Decimal 使用替代格式。比如整数在用十六进制输出时添加0x前缀。

width:前导0则相当于fill='0' & align='='

,:数字自动添加千分号。

precision:和type = "f" | "F" | "g" | "G"控制浮点精度,或表示最大域空间。

type:二进制,字符,十进制,科学计数,科学计数大写,定点,定点(NAN, INF), 标准格式(太长),标准格式大写,数字,八进制,十六进制,十六进制大写,百分比。 不写的话整数十进制,浮点数差不多是标准格式。