..

熟悉的陌生人: 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

  1. 关键字(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" | "%"

下边对上图的每个选项做解释(默认为空):

  1. fill:
    填充的字符, 默认为空字符串, 但前提是必须先指定align: [[fill]align].

  2. 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————-’

  3. sign:
    这个参数只读数字起效, 它有三个选项:
    '-': 1 → ‘1’(默认选项)
    '+': 1 → ‘+1’
    ' ': 1 → ’ 1’
    -1话, 都是渲染为’-1’

  4. width:
    字符串最后的总长度

  5. grouping_option:
    对数字分段:
    ‘{:,}’.format(1234567890)
    ‘1,234,567,890’

  6. precision:
    控制精度, 截取浮点型数值小数点后的位数, eg. {:.2}.format(3.1415926)

  7. type:

  1. 将整数转化为不同的进制.
  2. 将浮点数渲染成不同的格式, 例如百分比形式, 指数形式…

One more

给大家留一个小问题, 如何在这种情况下只输出一个大括号呢?
'???}'.format('test')'???}'

EOF