目录
1. 标准格式化语法
2. 基础用法:单个或多个{}
3. 基础用法:索引
4. 基础用法:参数
5. 添加{}字符串
6. f字符串
如下字符串的标准格式化规范语法,可直接在字符串的 format() 方法上使用,也可以用于 Python3.6 新添加的 f-字符串。
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::=
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
format()方法最简单的应用,即将()内表达式、字符串、整数、浮点数、列表、元组,添加到前方字符串中的{}中;
填充多个{}时,默认依次从()内取出相应数据,依次填充至对应位置{};
()内元素多于{}数量时,从左至右依次选取,正常填充,剩余的()内元素不使用;
{}数量多于()元素时,报错。
#format基础运用,将()内内容,填充到前方{}中
"abcd{}efg".format('123')
'abcd123efg'
#format支持表达式、字符串、整数、浮点数、列表、元组,直接填充到前方字符串中
x = 'abcd'
'中文一{}二三'.format(x[2:])
'中文一cd二三'
'中文一{}二三'.format(x.find('c'))
'中文一2二三'
'中文一{}二三'.format(3.0)
'中文一3.0二三'
#format支持从()中多组数据,依次对多个{}填充
'中文{}一{}二{}三'.format(3.0,[1,2],'ab')
'中文3.0一[1, 2]二ab三'
'中文{}一{}二{}三'.format(-5,[1,2],('a',0))
"中文-5一[1, 2]二('a', 0)三"
#()内元素多于{}数量时,从左至右依次选取,正常填充,剩余的()内元素不使用;
'中文{}一{}二三'.format(3.0,[1,2],'ab')
'中文3.0一[1, 2]二三'
#{}数量多于()元素时,报错。
'中文{}一{}二{}三'.format(3.0,[1,2])
Traceback (most recent call last):
File "", line 1, in
IndexError: Replacement index 2 out of range for positional args tuple
format()方法,可以在{}内输入对应的()内元素索引值,直接调用该元素,每个元素都可以被多次调用;
{}内索引值大于()内现有元素数量报错;
{}内直接输入表达式、列表、元组、负数、字符串,报错。
#{}内输入索引值方法调用对应()内元素,每个元素都可以被多次调用
'{1}中文a{2}bc123{0}'.format('X','Y','Z')
'Y中文aZbc123X'
'{0}中文a{0}bc123{0}'.format('X')
'X中文aXbc123X'
#{}内索引值大于()内现有元素数量报错
'中{4}文'.format('X','Y','Z')
Traceback (most recent call last):
File "", line 1, in
IndexError: Replacement index 4 out of range for positional args tuple
#{}内直接输入表达式、列表、元组、负数、字符串,报错
'中{-1}文'.format('X','Y','Z')
Traceback (most recent call last):
File "", line 1, in
KeyError: '-1'
'中{[0,1]}文'.format('X','Y','Z')
Traceback (most recent call last):
File "", line 1, in
TypeError: string indices must be integers
'中{(0,1)}文'.format('X','Y','Z')
Traceback (most recent call last):
File "", line 1, in
KeyError: '(0,1)'
'中{1+1}文'.format('X','Y','Z')
Traceback (most recent call last):
File "", line 1, in
KeyError: '1+1'
'中{'a'}文'.format('X','Y','Z')
File "", line 1
'中{'a'}文'.format('X','Y','Z')
^
SyntaxError: invalid syntax
format()方法,可以在()对参数赋值,{}内输入对应的参数即可调用该参数所赋数值填充,每个元素都可以被多次调用;
可以混合使用索引和参数两种方法,参数不参与索引排序,无法被索引值调用;
()内必须索引值调用的元素在前,参数名赋值在后,顺序颠倒或交叉都报错。
#{}内输入参数名,调用参数对应()内复制,每个参数都可以被多次调用
'{c}中文a{a}bc123{b}'.format(a='X',b='Y',c='Z')
'Z中文aXbc123Y'
'{a}中文a{a}bc123{a}'.format(a='X')
'X中文aXbc123X'
'{c}中文a{a}bc123{b}'.format(a=1,b=[2,'0'],c=(3j,['567']))
"(3j, ['567'])中文a1bc123[2, '0']"
#调用不存在参数名,报错
'{d}中文'.format(a='X',b='Y',c='Z')
Traceback (most recent call last):
File "", line 1, in
KeyError: 'd'
#参数不参与索引排序,无法被索引值调用
'{'X'}中文'.format(a='X',b='Y',c='Z')
File "", line 1
'{'X'}中文'.format(a='X',b='Y',c='Z')
^
SyntaxError: invalid syntax
#混合调用索引和参数名
'{c}中文a{1}bc1{b}23{0}'.format('一','二','三',a='X',b='Y',c='Z')
'Z中文a二bc1Y23一'
'中{4}文'.format('一','二','三',a='X',b='Y',c='Z')
Traceback (most recent call last):
File "", line 1, in
IndexError: Replacement index 4 out of range for positional args tuple
#()内必须索引值调用的元素在前,参数名赋值在后,顺序颠倒或交叉都报错
'中{0}文'.format(a='X',b='Y',c='Z','一','二','三')
File "", line 1
'中{0}文'.format(a='X',b='Y',c='Z','一','二','三')
^
SyntaxError: positional argument follows keyword argument
'中{0}文'.format('一',a='X','二',b='Y',c='Z')
File "", line 1
'中{0}文'.format('一',a='X','二',b='Y',c='Z')
^
SyntaxError: positional argument follows keyword argument
如果format方法前字符串中,需要有{}字符,则可以通过{{}}添加;
{{}}不参与字符串格式化操作。
#通过{{}}在format方法前字符串中添加{}
'中文{{}}'.format()
'中文{}'
#{{}}不参与字符串格式化操作
'中文{{}}'.format(0)
'中文{}'
'中{}文{{}}'.format(1)
'中1文{}'
'中{{}}wen{}'.format(1)
'中{}wen1'
f-string 可以直接看作是 format() 方法的语法糖,它进一步简化了格式化字符串的操作并带来了性能上的提升。
基础使用方法即:
f"xxxxx{字符串:format选项}xxxxx"
f也可以大写为F。
实操示例:
#align、width、fill
F'中{-0.03:$=10}文'
'中-$$$$$0.03文'
f'中{666:1>10}文'
'中1111111666文'
f'中{"xyz":&<10}文'
'中xyz&&&&&&&文'
f'中{3j:^10}文'
'中 3j 文'
#sign
f'中{123:+}文'
'中+123文'
F'中{2.0: }文'
'中 2.0文'
#grouping_option
f'中{1234567:,}文'
'中1,234,567文'
F'中{12345.67:_}文'
'中12_345.67文'
#type
f"A{10:b}Z"
'A1010Z'
f"A{0:c}Z"
'A\x00Z'
f"A{0x100:d}Z"
'A256Z'
f'A{0.000123456789:e}Z'
'A1.234568e-04Z'
F'A{-12345.6789+98.7654321j:f}Z'
'A-12345.678900+98.765432jZ'
#多重复用
f"{1.23456:&>12.3g}"
'&&&&&&&&1.23'