本节主要讲解三种格式化:%、format()和f-string。
环境说明:调出Python测试环境,根据下图操作,出现 >>>,就可以在后面敲相关的代码。
基本语法:'%s'% variable
和'%s%s'% (var1,val2)
。
常用符号:
符号 | 说明 | 例子 |
---|---|---|
%s | 传递字符串、整数、浮点数等参数均可 | |
%d或%i | 传递整数参数 | |
%f或%F | 传递浮点数参数,默认6位小数 | |
%e或%E | 传递整数或浮点参数 | |
%g或%G | 自动识别小数 | |
+ | 显示数字的正负号,仅限数字格式化。 | |
.n | 保留小数点位数,仅限数字格式化,不够0填充。 | |
m.n | .n 同上,m是格式化之后的字符总长度,一般地,m>n。不够用空格补足。 | |
m | 如果仅有m,没有.n ,m的含义同上,表示格式化之后的字符总长度,补足补空格。如 '%2i'% 1 返回' 1' 。如果是数字位数不够补0,可在格式化的数字前加0,如 '%02i'% 1 返回'01' ,如果要填充其他数字似乎没有办法,需要使用format()。 | |
- | 左对齐,默认是右对齐。 | |
%% | 表示一个%。其实不属于格式化,由于和格式化字符一致,顺带说明 |
例子代码合集:
# %s
>>> '%+s'% '123'
'123'
>>> '%+s'% 123
'123'
>>> '%s'% 12.3
'12.3'
>>> '%s'% (1+2j)
'(1+2j)'
# %d或%i
>>> '%i'% 12
'12'
>>> '%i'% 12.6
'12'
# %f或%F
>>> '%f'% 12.6
'12.600000'
>>> '%f'% 12
'12.000000'
# %e或%E
>>> '%e'% 12
'1.200000e+01'
>>> '%e'% 12.3
'1.230000e+01'
# %g或%G
>>> '%g'% 12
'12'
>>> '%g'% 12.3
'12.3'
# +
>>> '%+i'% 12.6
'+12'
>>> '%+i'% -12.6
'-12'
>>> '%+.2f'% -12.6
'-12.60'
# .n
>>> '%.2f'% 12
'12.00'
>>> '%.2f'% 12.6
'12.60'
>>> '%.2e'% 12
'1.20e+01'
# m.n
>>> '%6.2f'% 12
' 12.00'
# m
>>> '%10i'% 12
' 12'
>>> '%10f'% 12
' 12.000000'
>>> '%010i'% 12
'0000000012'
# -
>>> '%-10f'% 12
'12.000000 '
>>> '%-10i'% 12
'12 '
# %%
>>> '%.2f%%'% 12
'12.00%'
如果是多个变量格式化,则采用'%s%s'% (var1,val2)
,多个变量用括号括起来。
前面字符串的格式化标识%
的个数和后面变量的个数要一致,通过位置一一对应。
>>> '%i+%.2f=%.2f'%(-1,2.1,1.1)
'-1+2.10=1.10'
% 还有2种很灵活的用法:
a = '这是一个%(adj)s玩法!'%({'adj':'有趣而灵活的'})
print(a)
a = '这是一个%s玩法!'
print(a % '有趣而灵活的')
基本语法:'{}'.format()
。
常用符号:部分符号和%
是一样的,但是支持的功能更多。
# 基本用法就是通过位置进行对应,如下:
>>> '{}'.format(1)
'1'
>>> '{}'.format(1,2) # 取0位
'1'
>>> '{}{}'.format(1,2)
'12'
# 通过索引定位
>>> '{1}'.format(1,2)
'2'
>>> '{1}{0}'.format(1,2)
'21'
# 保留小数位,加上冒号 : ,后面加上的格式化方式同 % ,冒号前指定位置,默认0
>>> '{:.2f}'.format(1,2)
'1.00'
>>> '{1:.2f}'.format(1,2)
'2.00'
# 显示符号
>>> '{:+}'.format(1,2)
'+1'
>>> '{:+.2f}'.format(1,2)
'+1.00'
# 指定长度并对齐
>>> '{:^4}'.format(1,2) # 居中对齐,格式化后字符长度为4
' 1 '
>>> '{:<4}'.format(1,2) # 左对齐,格式化后字符长度为4
'1 '
>>> '{:>4}'.format(1,2) # 右对齐,格式化后字符长度为4
' 1'
# 指定填充符号
>>> '{:0^4}'.format(1,2)
'0100'
>>> '{:@^4}'.format(1,2)
'@1@@'
# 千分位展示
>>> '{1:,}'.format(1,2345)
'2,345'
>>> '{1:_}'.format(1,2345)
'2_345'
# 最后来个汇总
>>> '{1:*<+10.2f}'.format(1,2345)
'+2345.00**'
>>> '{1:*<+10,.2f}'.format(1,2345)
'+2,345.00*'
>>> '{1:*<+10_.2f}'.format(1,2345)
'+2_345.00*'
format() 也可以先预留位置,后传递值。
a = '这是一个{}玩法!'
print(a.format('有趣而灵活的'))
该用法可以直接传入变量,不需要像format()一样传入引号后面的内容,比format()简洁一些。
>>> a = 2345
>>> f'{a}'
'2345'
>>> f'{a:*<+10,.2f}'
'+2,345.00*'
>>> f'{2345:*<+10,.2f}'
'+2,345.00*'
使用 % 会比较方便快捷一些,日常使用基本够用。format()功能比较强大,也相对复杂一些。f-string处于二者中间,拥有format()强大的功能,又比较简洁,但相对 % 会相对复杂一些,当然,不过作为工具,只要多用,熟悉之后都会变得相对简单。
语法总结:
% :'%[-][+][填充0][宽度][精度][类型]'% [参数]
format():'{{[索引][:][填充][对齐][+][宽度][千分位符][精度][类型]}'.format([参数])
f-string:'{{[变量][:][填充][对齐][+][宽度][千分位符][精度][类型]}'
>>> '%s:%-+010.2f%%'% ('百分之十二',12)
'百分之十二:+12.00 %'
>>> '{1:*<+10,.2f}'.format(1,2345)
'+2,345.00*'
>>> a = 2345
>>> f'{a:*<+10,.2f}'
'+2,345.00*'
下一篇预告:字符串编码。