前言
简单记录下 Python 中用 format
格式化字符串的语法。
Format格式化
迷你格式化语言
1 | format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] |
对齐:
选项 | 含意 |
---|---|
'<' |
强制字段在可用空间内左对齐(这是大多数对象的默认值)。 |
'>' |
强制字段在可用空间内右对齐(这是数字的默认值)。 |
'=' |
强制在符号(如果有)之后数码之前放置填充。 这被用于以 '+000000120' 形式打印字段。 这个对齐选项仅对数字类型有效。 这是当 '0' 紧接在字段宽度之前时的默认选项。 |
'^' |
强制字段在可用空间内居中。 |
type字段
类型 | 含意 |
---|---|
'b' |
二进制格式。 输出以 2 为基数的数字。 |
'c' |
字符。在打印之前将整数转换为相应的unicode字符。 |
'd' |
十进制整数。 输出以 10 为基数的数字。 |
'o' |
八进制格式。 输出以 8 为基数的数字。 |
'x' |
十六进制格式。 输出以 16 为基数的数字,使用小写字母表示 9 以上的数码。 |
'X' |
十六进制格式。 输出以 16
为基数的数字,使用大写字母表示 9 以上的数码。 在指定 '#'
的情况下,前缀 '0x' 也将被转为大写形式
'0X' 。 |
'n' |
数字。 这与 'd'
相似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符。 |
None | 和 'd' 相同。 |
浮点数
类型 | 含意 |
---|---|
'e' |
科学计数法。 对于一个给定的精度
p ,将数字格式化为以字母 'e'
分隔系数和指数的科学计数法形式。 系数在小数点之前有一位,之后有
p 位,总计 p + 1 个有效数位。
如未指定精度,则会对 float
采用小数点之后 6 位精度,而对 Decimal
则显示所有系数位。
如果小数点之后没有数位,则小数点也会被略去,除非使用了 #
选项。 |
'E' |
科学计数法。 与 'e'
相似,不同之处在于它使用大写字母 'E' 作为分隔字符。 |
'f' |
定点表示法。 对于一个给定的精度
p ,将数字格式化为在小数点之后恰好有 p
位的小数形式。 如未指定精度,则会对 float
采用小数点之后 6 位精度,而对 Decimal
则使用大到足够显示所有系数位的精度。
如果小数点之后没有数位,则小数点也会被略去,除非使用了 #
选项。 |
'F' |
定点表示。 与 'f'
相似,但会将 nan 转为 NAN 并将
inf 转为 INF 。 |
'g' |
常规格式。 对于给定精度
p >= 1 ,这会将数值舍入到 p
个有效数位,再将结果以定点表示法或科学计数法进行格式化,具体取决于其值的大小。
精度 0 会被视为等价于精度
1 。准确的规则如下:假设使用表示类型 'e' 和精度
p-1 进行格式化的结果具有指数值 exp 。 那么如果
m <= exp < p ,其中 m 以 -4
表示浮点值而以 -6 表示 Decimal
值,该数字将使用类型 'f' 和精度 p-1-exp
进行格式化。 否则的话,该数字将使用表示类型 'e' 和精度
p-1 进行格式化。
在两种情况下,都会从有效数字中移除无意义的末尾零,如果小数点之后没有余下数字则小数点也会被移除,除非使用了
'#' 选项。如未指定精度,会对 float
采用 6 个有效数位的精度。 对于 Decimal ,结果的系数会沿用原值的系数数位;对于绝对值小于
1e-6 的值以及最小有效数位的位值大于 1
的数值将会使用科学计数法,在其他情况下则会使用定点表示法。正负无穷,正负零和
nan 会分别被格式化为 inf , -inf ,
0 , -0 和
nan ,无论精度如何设定。 |
'G' |
常规格式。 类似于
'g' ,不同之处在于当数值非常大时会切换为 'E' 。
无穷与 NaN 也会表示为大写形式。 |
'n' |
数字。 这与 'g'
相似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符。 |
'%' |
百分比。 将数字乘以 100 并显示为定点
('f' ) 格式,后面带一个百分号。 |
None | 对于 float
来说这类似于
'g' ,不同之处在于当使用定点表示法时,小数点之后将至少显示一位。
所用的精度会大到足以精确表示给定的值。对于 Decimal
来说这相当于 'g' 或 'G' ,具体取决于当前
decimal 上下文的 context.capitals 值。总体效果是将 str()
的输出匹配为其他格式化因子所调整出的样子。 |
参考资料
官方文档:https://docs.python.org/zh-cn/3/library/string.html#formatstrings