目录
0. 格式化语法结构
再次说明字符串的标准格式化规范语法如下:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
1. align、width、fill选项
对齐(**[align]**)选项,一共有 '<'、'>'、'='、'^'4 个值可供使用。
既然要实现对齐,那么就需要指定一个更大的空间才行(否则没意义),更大的空间可以通过宽度(**[width]**)选项来指定。
1.1-1.4章节中,所有'<'、'>'、'='、'^'后的数值都是width值。
1.1 '<'左对齐
强制字符串在可用空间内左对齐;
只输入width选项数值,除非()内元素为复数,否则即默认左对齐;
整数、字符串、浮点数、复数可以使用format对齐,列表、元组则报错;
浮点数、复数对齐时,数字、标点符号'.'、复数符号'j'都占据一位;
当给出的width宽度小于元素长度,则直接插入元素,对齐没意义。
#强制字符串0在3字节可用空间内左对齐;
'中{:<3}文'.format('0')
'中0 文'
#只输入width选项数值,除非()内元素为复数,否则即默认左对齐
'中{:3}文'.format('0')
'中0 文'
#()内元素为复数时,只输入width默认为右对齐,可以通过使用<变为左对齐
'中{:3}文'.format(1j)
'中 1j文'
'中{:<3}文'.format(1j)
'中1j 文'
#整数、字符串、浮点数可以使用format对齐,列表、元组则报错;
'中{0:3}文'.format(0,'1',2.0,[3,4],(5,))
'中 0文'
'中{1:3}文'.format(0,'1',2.0,[3,4],(5,))
'中1 文'
'中{2:3}文'.format(0,'1',2.0,[3,4],(5,))
'中2.0文'
'中{3:3}文'.format(0,'1',2.0,[3,4],(5,))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{4:3}文'.format(0,'1',2.0,[3,4],(5,))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
当给出的width宽度小于元素长度,则直接插入元素
'中{:3}文'.format('0123')
'中0123文'
1.2 '>'右对齐
强制字符串在可用空间内右对齐,支持整数、字符串、浮点数、复数;
#强制字符串在可用空间内右对齐,支持整数、字符串、浮点数、复数
'中{0:>5}文'.format('01',23,4.5,7+8j)
'中 01文'
'中{1:>5}文'.format('01',23,4.5,7+8j)
'中 23文'
'中{2:>5}文'.format('01',23,4.5,7+8j)
'中 4.5文'
'中{3:>5}文'.format('01',23,4.5,7+8j)
'中(7+8j)文'
1.3 '='填充
强制将填充放置在符号(如果有)之后但在数字之前的位置(这适用于以 “+000000120” 的形式打印字符串);
填充支持整型和浮点数,字符串、复数不可用于该方法;
填充数据在数字之前,或者在'-'符号和数字之间填充,'+'无效果;
#填充支持整型和浮点数,填充数据在数字之前,或者在'-'符号和数字之间填充
'中{0:=10}文'.format(12,-23,3.4,-3.4)
'中 12文'
'中{1:=10}文'.format(12,-23,3.4,-3.4)
'中- 23文'
'中{2:=10}文'.format(12,-23,3.4,-3.4)
'中 3.4文'
'中{3:=10}文'.format(12,-23,3.4,-3.4)
'中- 3.4文'
#填充对'+'无效果;
'中{:=10}文'.format(+3)
'中 3文'
#填充字符串、复数不可用报错
'中{:=10}文'.format(1j)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: '=' alignment flag is not allowed in complex format specifier
'中{:1=10}文'.format('3')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
1.4 '^'居中
强制字符串在可用空间内居中;
当字符串不能恰好在中间时,整体在中间位置靠前一位;
支持整数、字符串、浮点数、复数,不支持列表、元组。
#强制字符串在可用空间内居中,当字符串不能恰好在中间时,整体在中间位置靠前一位
#支持整数、字符串、浮点数、复数
'中{0:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 0 文'
'中{1:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 1 文'
'中{2:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 2.0 文'
'中{3:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 3j 文'
#不支持列表、元组
'中{4:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{5:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
1.5 fill选项
对齐([align])选项的前面通过填充选项(**[fill]**)指定填充字符;
直接在width值前加0,相当于设置了 [fill] 为 '0',然后 [align] 设置为 '=',加其他数值无效,该方法'='时一样,只支持填充整型、浮点型数据;
fill选项可以为数字、字母、符号、空格、空字符串,空格和空字符串与未填写fill一致,即默认填充空格;
fill选项只能填充单字符,否则报错。
#fill选项可以为数字、字母、符号、空格、空字符串
'中{:1>10}文'.format(666)
'中1111111666文'
'中{:&<10}文'.format('xyz')
'中xyz&&&&&&&文'
'中{:$=10}文'.format(-0.03)
'中-$$$$$0.03文'
#空格和空字符串与未填写fill一致,即默认填充空格;
'中{: ^10}文'.format(2+5j)
'中 (2+5j) 文'
'中{:''^10}文'.format(1)
'中 1 文'
#fill选项只能填充单字符,否则报错。
'中{:$$=10}文'.format(-0.03)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Invalid format specifier
'中{:33<10}文'.format('1')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Invalid format specifier
'中{:aa^10}文'.format(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Invalid format specifier
#直接在width值前加0,相当于设置了 [fill] 为 '0',然后 [align] 设置为 '=',只支持填充整型、浮点型数据;
'中{:010}文'.format(1)
'中0000000001文'
'中{:010}文'.format(1.2)
'中00000001.2文'
'中{:010}文'.format('1')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
2. sign选项
2.1 '+'
正数在前面添加正号(+),负数在前面添加负号(-);
在0前面添加正号(+);
sign选项支持对整数、浮点数、复数,以及会生成这些类型数的运算式;
对于带负号的复数,如没有实数部分,会自动添加-0;
sign选项不支持字符串、列表、元组等其他类型。
#正数在前面添加正号(+),负数在前面添加负号(-)
'中{:+}文'.format(123)
'中+123文'
'中{:+}文'.format(-123)
'中-123文'
#在0前面添加正号(+)
'中{:+}文'.format(0)
'中+0文'
#sign选项支持对浮点数
'中{:+}文'.format(0.55)
'中+0.55文'
'中{:+}文'.format(-0.55)
'中-0.55文'
#sign选项支持对复数;对于带负号的复数,如没有实数部分,会自动添加-0
'中{:+}文'.format(2+2j)
'中(+2+2j)文'
'中{:+}文'.format(-2-2j)
'中(-2-2j)文'
'中{:+}文'.format(2j)
'中+2j文'
'中{:+}文'.format(-2j)
'中(-0-2j)文'
#sign选项支持各类数字运算式;
'中{:+}文'.format(2-10)
'中-8文'
'中{:+}文'.format(3-1)
'中+2文'
'中{:+}文'.format(2**2)
'中+4文'
'中{:+}文'.format(7/3)
'中+2.3333333333333335文'
#sign选项不支持字符串、列表、元组等其他类型。
'中{:+}文'.format('1')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Sign not allowed in string format specifier
'中{:+}文'.format([3])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{:+}文'.format((3,))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
2.2 '-'
只有负数在前面添加符号(-),默认行为
#只有负数在前面添加符号(-)
#支持整数
'中{:-}文'.format(3)
'中3文'
'中{:-}文'.format(-3)
'中-3文'
#支持浮点数
'中{:-}文'.format(2.0)
'中2.0文'
'中{:-}文'.format(-2.0)
'中-2.0文'
#支持复数
'中{:-}文'.format(3j)
'中3j文'
'中{:-}文'.format(-3j)
'中(-0-3j)文'
#支持运算式
'中{:-}文'.format(1-1)
'中0文'
'中{:-}文'.format(-1+1)
'中0文'
'中{:-}文'.format(-5/3)
'中-1.6666666666666667文'
'中{:-}文'.format(-5**3)
'中-125文'
2.3 空格
正数在前面添加一个空格,负数在前面添加负号(-)
#正数在前面添加一个空格,负数在前面添加负号(-)
#支持整数
'中{: }文'.format(1)
'中 1文'
'中{: }文'.format(-1)
'中-1文'
#支持浮点数
'中{: }文'.format(2.0)
'中 2.0文'
'中{: }文'.format(-2.0)
'中-2.0文'
#支持复数
'中{: }文'.format(3j)
'中 3j文'
'中{: }文'.format(-3j)
'中(-0-3j)文'
#支持运算式
'中{: }文'.format(1+2)
'中 3文'
'中{: }文'.format(1-2)
'中-1文'
'中{: }文'.format(3/4)
'中 0.75文'
'中{: }文'.format(-3**4)
'中-81文'
3. grouping_option选项
可以设置千位分隔符,它有两个值可以选择 —— ',' 或 '_';
只对整数或浮点数的整数部分做千位分割,复数会同时对实数和虚数两部分的整数部分做千位分割;
可以对运算式结果做千位分割。
#只对整数或浮点数的整数部分做千位分割,
'中{:,}文'.format(1234567)
'中1,234,567文'
'中{:,}文'.format(12.34567)
'中12.34567文'
'中{:,}文'.format(12345.67)
'中12,345.67文'
'中{:_}文'.format(1234567)
'中1_234_567文'
'中{:_}文'.format(12.34567)
'中12.34567文'
'中{:_}文'.format(12345.67)
'中12_345.67文'
#复数会同时对实数和虚数两部分的整数部分做千位分割
'中{:_}文'.format(12345.67+232513.2j)
'中(12_345.67+232_513.2j)文'
'中{:_}文'.format(123**4)
'中228_886_641文'
'中{:_}文'.format(-123**4)
'中-228_886_641文'
'中{:,}文'.format(12345.67+232513.2j)
'中(12,345.67+232,513.2j)文'
'中{:,}文'.format(123**4)
'中228,886,641文'
'中{:,}文'.format(-123**4)
'中-228,886,641文'
4. .precision选项
精度(**[.precision]**)选项是一个十进制整数,对于不同类型的参数,它的效果是不一样的。
4.1.precision直接使用
直接使用精度选项,用于从()中字符串截取相应长度字符;
#直接使用精度选项,用于从()中字符串,从左至右截取相应长度字符
'中{:.3}文'.format('3.1415926')
'中3.1文'
'中{:.4}文'.format('abcXYZ')
'中abcX文'
#此时不支持数字、列表、元组
'中{:.3}文'.format(1234)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Precision not allowed in intege
'中{:.3}文'.format([1,2,3,4,5])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{:.3}文'.format((1,2,3,4))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
4.2 通过'f' 或 'F' 使用
对于 'f' 或 'F' 格式化的浮点数值来说,精度是限定小数点后显示多少个数位;
整数转换为浮点数,带小数部分参与格式化;
如小数位数不够,则数字后填充0;
#对于 'f' 或 'F' 格式化的浮点数值来说,精度是限定小数点后显示多少个数位
'中{:.3f}文'.format(3.1415926)
'中3.142文'
'中{:.3F}文'.format(3.1415926)
'中3.142文'
#此时整数是转换为浮点数参与格式化
'中{:.3f}文'.format(1234)
'中1234.000文'
#如小数位数不够,则数字后填充0;
'中{:.5f}文'.format(1.2)
'中1.20000文'
4.3通过'g' 或 'G' 使用
对于 'g' 或 'G' 格式化的浮点数值来说,是从最大一位开始限定共显示多少位;
可以用于限定浮点数和整数;
整数部分数值总长超过精度,则应用科学计数法表示;
整数部分不超过精度,小数部分超过,则直接截短小数部分;
如总位数不够,则直接显示现有部分。
#对于 'g' 或 'G' 格式化的浮点数值来说,是从最大一位开始限定共显示多少位
'中{:.3g}文'.format(3.1415926)
'中3.14文'
'中{:.3G}文'.format(3.1415926)
'中3.14文'
#整数部分数值总长超过精度,则应用科学计数法表示
'中{:.3g}文'.format(123456.654321)
'中1.23e+05文'
#整数部分不超过精度,小数部分超过,则直接截短小数部分
'中{:.3g}文'.format(12.345)
'中12.3文'
'中{:.3g}文'.format(123.45)
'中123文'
#如总位数不够,则直接显示现有部分
'中{:.5g}文'.format(12.3)
'中12.3文'
'中{:.5g}文'.format(12)
'中12文'
5. type选项-整数型
type选项以下类型,只适用于整数。
5.1 'b'
将参数以二进制的形式输出;
参数只能为整数,可以为正整数、零、负整数;
添加井号([#])选项后,参数以二进制、八进制或十六进制在字符串中输出的时候,会自动追加前缀 "0b"、"0o" 和 "0x"。
#将参数以二进制的形式输出,可以为正整数、零、负整数;
"A{:b}Z".format(10)
'A1010Z'
"A{:b}Z".format(0)
'A0Z'
"A{:b}Z".format(-10)
'A-1010Z'
#添加井号([#])选项后,参数以二进制在字符串中输出,自动追加前缀 "0b"
"A{:#b}Z".format(10)
'A0b1010Z'
"A{:#b}Z".format(-10)
'A-0b1010Z'
#不支持浮点数、复数
"A{:b}Z".format(10.2)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Unknown format code 'b' for object of type 'float'
"A{:b}Z".format(10j)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Unknown format code 'b' for object of type 'complex'
5.2 'c'
将参数以 Unicode 字符的形式输出;
Unicode编码参见:字符编码笔记:ASCII,Unicode 和 UTF-8 ;
参数不能为负数,最大值也有上限;
添加井号([#])选项后,报错。
#将参数以 Unicode 字符的形式输出
"A{:c}Z".format(10)
'A\nZ'
"A{:c}Z".format(0)
'A\x00Z'
"A{:c}Z".format(100)
'AdZ'
#参数不能为负数,最大值也有上限
"A{:c}Z".format(-10)
Traceback (most recent call last):
File "<input>", line 1, in <module>
OverflowError: %c arg not in range(0x110000)
"A{:c}Z".format(1000000000000000000000000)
Traceback (most recent call last):
File "<input>", line 1, in <module>
OverflowError: Python int too large to convert to C long
#使用'#'报错
"A{:#c}Z".format(100)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Alternate form (#) not allowed with integer format specifier 'c'
5.3 'd'、'n'、None
选项'd'将参数以十进制的形式输出;
参数只能为整数,可以为正整数、零、负整数;
添加井号([#])选项后,输出无变化。
None在用于整数情况下,和'd'类似;'n'也和'd'类似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符。
#选项'd'将参数以十进制的形式输出
"A{:d}Z".format(10)
'A10Z'
"A{:d}Z".format(-10)
'A-10Z'
"A{:d}Z".format(0x10)
'A16Z'
"A{:d}Z".format(0b100)
'A4Z'
#使用'#',输出无变化
"A{:#d}Z".format(0b100)
'A4Z'
#在适用于整数情况下,None、'n'和'd'类似
"A{:d}Z".format(0x100)
'A256Z'
"A{:}Z".format(-0b100)
'A-4Z'
5.4 'o'
将参数以八进制的形式输出;
参数只能为整数,可以为正整数、零、负整数;
添加井号([#])选项后,参数以八进制在字符串中输出,自动追加前缀 "0o" 。
#将参数以八进制的形式输出
"A{:o}Z".format(0x100)
'A400Z'
"A{:o}Z".format(-100)
'A-144Z'
"A{:o}Z".format(0)
'A0Z'
#添加井号([#])选项后,参数以八进制在字符串中输出,自动追加前缀 "0o"
"A{:#o}Z".format(80)
'A0o120Z'
"A{:#o}Z".format(-80)
'A-0o120Z'
5.5 'x'、'X'
将参数以十六进制的形式输出;
参数只能为整数,可以为正整数、零、负整数;
添加井号([#])选项后,参数以十六进制在字符串中输出时,使用'x'时自动追加前缀 "0x",使用'X'时自动追加前缀 "0X" 。
#将参数以十六进制的形式输出
"A{:x}Z".format(100)
'A64Z'
"A{:X}Z".format(-100)
'A-64Z'
"A{:X}Z".format(0)
'A0Z'
#添加井号([#])选项后,参数以十六进制在字符串中输出时,使用'x'时自动追加前缀 "0x",使用'X'时自动追加前缀 "0X"
"A{:#X}Z".format(-0o60)
'A-0X30Z'
"A{:#x}Z".format(0b10010)
'A0x12Z'
6. type选项-浮点&复数
以下类型值适用于浮点数、复数和整数(自动转换为等值的浮点数)如下:
6.1 'e'、'E'
将参数以科学记数法的形式输出,支持整数、浮点数、复数;
科学计数默认输出结果为x.xxxxxxe+/-xx,数值首位除0以外必然>0,最后一位通过四舍五入进位得出;
科学计数时,按照'e'、'E'的大小写,以字母'e'、'E'来标示指数;
默认精度为 6,即科学技术后小数点后保留六位,不足六位以0补齐;
可以使用.precision控制精度,精度控制小数点后位数。
#将参数以科学记数法的形式输出,支持整数、浮点数、复数
#科学计数时,按照'e'、'E'的大小写,以字母'e'、'E'来标示指数
#默认精度为 6,即科学技术后小数点后保留六位,不足六位以0补齐
'A{:e}Z'.format(123)
'A1.230000e+02Z'
'A{:e}Z'.format(0)
'A0.000000e+00Z'
'A{:E}Z'.format(0.1)
'A1.000000E-01Z'
'A{:e}Z'.format(-12345.6789)
'A-1.234568e+04Z'
'A{:e}Z'.format(0.000123456789)
'A1.234568e-04Z'
'A{:E}Z'.format(12345067.89+98.76540321j)
'A1.234507E+07+9.876540E+01jZ'
#数值首位除0以外必然>0,最后一位通过四舍五入进位得出
'A{:E}Z'.format(1234444444)
'A1.234444E+09Z'
'A{:E}Z'.format(1234555555)
'A1.234556E+09Z'
#可以使用.precision控制精度,精度控制小数点后位数
'A{:.2E}Z'.format(123456)
'A1.23E+05Z'
'A{:.10E}Z'.format(12.345689012345)
'A1.2345689012E+01Z'
6.2 'f'、'F'
将参数以定点表示法的形式输出,支持整数、浮点数、复数;
“不是数” 用 'nan' /'NAN' 标示,无穷用 'inf' / 'INF' 标示;
整数部分完整输出,小数按精度保留相应位数,最后一位通过四舍五入进位得出;
默认精度为 6,即小数点后保留六位,不足六位以0补齐;
可以使用.precision控制精度,精度控制小数点后位数。
#将参数以定点表示法的形式输出,支持整数、浮点数、复数
#默认精度为 6,即小数点后保留六位,不足六位以0补齐
'A{:f}Z'.format(123)
'A123.000000Z'
'A{:f}Z'.format(0)
'A0.000000Z'
'A{:f}Z'.format(12.3456789)
'A12.345679Z'
'A{:f}Z'.format(-12345.6789+98.7654321j)
'A-12345.678900+98.765432jZ'
#整数部分完整输出,小数按精度保留相应位数,最后一位通过四舍五入进位得出
'A{:f}Z'.format(1.234444444)
'A1.234444Z'
'A{:f}Z'.format(1.234555555)
'A1.234556Z'
#可以使用.precision控制精度,精度控制小数点后位数。
'A{:.2f}Z'.format(1.23456789)
'A1.23Z'
'A{:.10f}Z'.format(1.23456789)
'A1.2345678900Z'
6.3 'g'、'G'
通用格式,'g'、'G'小数以类似 'f'/'F'形式输出,大数以类似 'e'/'E' 的形式输出,支持整数、浮点数、复数;
使用'g'时,科学计数法输出字符为e;使用'G'时,科学计数法输出字符为E
'g'、'G'从第1位数字输出相应精度数值的数,超过六位数的数值才以科学计数法方式输出,小于六位数则以相应位数的浮点数形式显示【与e/E不同】;
默认精度为 6,即从第一位数字开始保留六位;科学计数结果或浮点数超过六位,则尾数四舍五入;科学计数结果或浮点数小于六位,则全部输出,小数部分不补0【与f/F、e/E不同】;
可以使用.precision控制精度,精度控制科学计数结果或浮点数完整位数,精度超出则四舍五入,精度不足不补0。
#'g'、'G'从第1位数字输出相应精度数值的数,支持整数、浮点数、复数
#超过六位数的数值才以科学计数法方式输出,小于六位数则以相应位数的浮点数形式显示
#使用'g'时,科学计数法输出字符为e;使用'G'时,科学计数法输出字符为E
'A{:g}Z'.format(123456.789)
'A123457Z'
'A{:g}Z'.format(1234567.89)
'A1.23457e+06Z'
'A{:G}Z'.format(1234567.89)
'A1.23457E+06Z'
'A{:g}Z'.format(0)
'A0Z'
'A{:g}Z'.format(-12.3456789+9876543.21j)
'A-12.3457+9.87654e+06jZ'
#默认精度为 6,即从第一位数字开始保留六位
#科学计数结果或浮点数超过六位,则尾数四舍五入
'A{:G}Z'.format(1234444444)
'A1.23444E+09Z'
'A{:G}Z'.format(1234555555)
'A1.23456E+09Z'
'A{:G}Z'.format(1.2344444)
'A1.23444Z'
'A{:g}Z'.format(1.2345555)
'A1.23456Z'
#科学计数结果或浮点数小于六位,则全部输出,小数部分不补0
'A{:g}Z'.format(1230000000000)
'A1.23e+12Z'
'A{:g}Z'.format(0.123)
'A0.123Z'
#可以使用.precision控制精度,精度控制科学计数结果或浮点数完整位数,精度超出则四舍五入,精度不足不补0
'A{:.2g}Z'.format(12900000000000)
'A1.3e+13Z'
'A{:.10g}Z'.format(12900000000000)
'A1.29e+13Z'
'A{:.2g}Z'.format(0.129111111111)
'A0.13Z'
'A{:.10g}Z'.format(0.129111111111)
'A0.1291111111Z'
6.4 'n'
'n'跟 'g' 类似,,支持整数、浮点数、复数,不同之处在于它会使用当前语言环境设置的分隔符插入到恰当的位置;
'n'为整数时完整输出,不可以做精度控制,否则报错【与g不同】;
'n'为浮点数或复数时,超过六位数的数值才以科学计数法方式输出,小于六位数则以相应位数的浮点数形式显示;
默认精度为 6,即从第一位数字开始保留六位;科学计数结果或浮点数超过六位,则尾数四舍五入;科学计数结果或浮点数小于六位,则全部输出,小数部分不补0;
可以使用.precision控制精度,精度控制小数位数,精度超出则四舍五入,精度不足不补0。
#'n'为整数时完整输出,不可以做精度控制,否则报错
'A{:n}Z'.format(123456789)
'A123456789Z'
'A{:.2n}Z'.format(123456789)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Precision not allowed in integer format specifier
#其他情况下,'n'跟 'g' 类似
'A{:n}Z'.format(123456789.0)
'A1.23457e+08Z'
'A{:n}Z'.format(0)
'A0Z'
'A{:n}Z'.format(-12.3456789+9876543.21j)
'A-12.3457+9.87654e+06jZ'
'A{:n}Z'.format(1234555555)
'A1234555555Z'
'A{:n}Z'.format(1.2345555)
'A1.23456Z'
'A{:g}Z'.format(1230000000000.0)
'A1.23e+12Z'
'A{:g}Z'.format(0.123)
'A0.123Z'
#可以使用.precision控制精度,精度控制科学计数结果或浮点数完整位数,精度超出则四舍五入,精度不足不补0
'A{:.2n}Z'.format(12900000000000.0)
'A1.3e+13Z'
'A{:.10n}Z'.format(12900000000000.0)
'A1.29e+13Z'
'A{:.2n}Z'.format(0.129111111111)
'A0.13Z'
'A{:.10n}Z'.format(0.129111111111)
'A0.1291111111Z'
6.5 '%'
以百分比的形式输出,支持整数、浮点数,不支持复数;
将数字乘以 100 并显示为定点表示法('f')的形式,后面附带一个百分号;
乘以 100 的结果,整数部分完整输出,小数按精度保留相应位数,最后一位通过四舍五入进位得出;
默认精度为 6,即小数点后保留六位,不足六位以0补齐;
可以使用.precision控制精度,精度控制小数点后位数。
#以百分比的形式输出,支持整数、浮点数
#默认精度为 6,即小数点后保留六位,不足六位以0补齐
'A{:%}Z'.format(123)
'A12300.000000%Z'
'A{:%}Z'.format(0)
'A0.000000%Z'
'A{:%}Z'.format(1.23456789123)
'A123.456789%Z'
#不支持复数,输入报错
'A{:%}Z'.format(1j)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Unknown format code '%' for object of type 'complex'
#小数按精度保留相应位数,最后一位通过四舍五入进位得出;
'A{:%}Z'.format(0.12344444444)
'A12.344444%Z'
'A{:%}Z'.format(0.12345555555)
'A12.345556%Z'
#可以使用.precision控制精度,精度控制小数点后位数
'A{:.2%}Z'.format(0.12344444)
'A12.34%Z'
'A{:.2%}Z'.format(0.12345555)
'A12.35%Z'
'A{:.8%}Z'.format(0.123444444444444444)
'A12.34444444%Z'
'A{:.8%}Z'.format(0.123455555555555555)
'A12.34555556%Z'
6.6 None
当type为None时,直接输出所有输入整数、浮点数、复数。
"{:}".format(1)
'1'
"{:}".format(123456789)
'123456789'
"{:}".format(0.123456789)
'0.123456789'
"{:}".format(-0.123456789+123456789j)
'(-0.123456789+123456789j)'
7. 多选参数调节
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
参考如上选项,可以按顺序同时使用多个参数,为保证调用清晰、检查方便,可以使用各种{参数名}执行,使代码更加易读。
示例如下:
"{:{fill}{align}{width}.{prec}{type}}".format(1.23456,fill='&',align='>',width=12,prec=3,type='g')
'&&&&&&&&1.23'
"{:{a}{b}{c}.{d}{e}}".format(1.23456,a='&',b='>',c=12,d=3,e='g')
'&&&&&&&&1.23'
"{:&>12.3g}".format(1.23456)
'&&&&&&&&1.23'

本文详细介绍了Python的`format()`函数的高级用法,包括align、width、fill选项,sign选项,grouping_option选项,.precision选项,以及type选项在整数和浮点数格式化中的应用。通过各种示例展示了如何使用这些选项来控制字符串格式化输出的对齐、符号、精度和数据类型。
2万+

被折叠的 条评论
为什么被折叠?



