熟悉的陌生人: Python format用法大全~
今天看到官方文档的时候, 突然发现format()这个方法这么强大, 有好多原先不知道的用法. 用这篇博客总结了一下.
语法总结(1.field_name 2. conversion 3. format_spec)
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>
第一眼可能给有些头晕, 但每个选项都懂了之后, 就会发现官方文档总结的非常清晰.
见第一行, 语法主要由三部分组成: 1.field_name 2. conversion 3. format_spec,
下文也将从这三部分出发, 一一解析每个选项的含义.
field_name
- 关键字(attribute_name):
这个地方其实有个小技巧, 就是一开头语法总结中的arg_name和element_index:
arg_name: keyword.name →getattr()
element_index: keyword[index] →__getitem__
**举个栗子🌰: **
conversion
官方例子:
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
"More {!a}" # Calls ascii() on the argument first
format_spec
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= integer
grouping_option ::= "_" | ","
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
下边对上图的每个选项做解释(默认为空):
fill:
填充的字符, 默认为空字符串, 但前提是必须先指定align:[[fill]align]
.align:
'<'
: 向左对齐'>'
: 向右对齐'='
: Forces the padding to be placed after the sign (if any) but before the digits. 意思就是说, 在符号(sign)的后边, 但在数字的前边做填充. 为了实现+000000120
里, ‘+‘和'120’的补零:'{:0=+8}'.format(123)
'^'
: 向中对齐:举例
'{:-^30}'.format('Text')
Out[3]: ‘————-Text————-’sign:
这个参数只读数字起效, 它有三个选项:'-'
: 1 → ‘1’(默认选项)'+'
: 1 → ‘+1’' '
: 1 → ’ 1’
-1话, 都是渲染为’-1’width:
字符串最后的总长度grouping_option:
对数字分段:
‘{:,}’.format(1234567890)
‘1,234,567,890’precision:
控制精度, 截取浮点型数值小数点后的位数, eg.{:.2}.format(3.1415926)
type:
- 将整数转化为不同的进制.
- 将浮点数渲染成不同的格式, 例如百分比形式, 指数形式…
One more
给大家留一个小问题, 如何在这种情况下只输出一个大括号呢?'???}'.format('test')
→ '???}'