Python 字符串格式化详参
{}
包裹的是替换域,{% 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), 标准格式(太长),标准格式大写,数字,八进制,十六进制,十六进制大写,百分比。 不写的话整数十进制,浮点数差不多是标准格式。