Python3字符串格式化输出有两种形式实现:
a:字符串格式化表达式: '...%...' % (values)
b:字符串格式化方法调用:'...{}...'.format(values) 或者 f'...{xx}...'
1:字符串格式化的类型码(typecode)
(表1)
2: 字符串格式化表达式
格式:%[(keyname)][flags][width][.precision]typecode (表2)
2.1:整数的输出
"""%o —— oct 八进制%d —— dec 十进制 %x —— hex 十六进制""" # %da = 123# 使用字典提供值print('1---[%(age)d]=','[%(age)d]' % {'age':a} )# %dprint('2---[%d]=','[%d]' % (a,))# 前面带 '+' 号print('3---[%+d]=','[%+d]' % (a,))# 最小宽度,默认右对齐print('4---[%5d]=','[%5d]' % (a,))# 最小宽度,默认右对齐,左边补0print('5---[%05d]=','[%05d]' % (a,))# 最小宽度,左对齐print('6---[%-5d]=','[%-5d]' % (a,)) """结果:1---[%(age)d]= [123]2---[%d]= [123]3---[%+d]= [+123]4---[%5d]= [ 123]5---[%05d]= [00123]6---[%-5d]= [123 ]""" """上面是十进制的输出,其他进制输出,只要把d% 替换为o%,x%即可。%o 八进制%x 十六进制"""
2.2:浮点数的输出:
%f:
#%fa = 123.123456789# 默认6位小数print('1----%f=','[%f]' % (a,))# 最小20位,7位小数,默认右对齐print('2----%20.7f=','[%20.7f]' % (a,))# 最小20位,7位小数,右对齐,左边补0print('3----%020.7f=','[%020.7f]' % (a,))# 最小20位,7位小数,左对齐print('4----%-20.7f=','[%-20.7f]' % (a,)) """结果:1----%f= [123.123457]2----%20.7f= [ 123.1234568]3----%020.7f= [000000000123.1234568]4----%-20.7f= [123.1234568 ]"""
%e:
#%ea = 123.123456789# 默认6位小数print('1----%f=','[%e]' % (a,))# 最小20位,7位小数,默认右对齐print('2----%20.7f=','[%20.7e]' % (a,))# 最小20位,7位小数,右对齐,左边补0print('3----%020.7f=','[%020.7e]' % (a,))# 最小20位,7位小数,左对齐print('4----%-20.7f=','[%-20.7e]' % (a,)) """结果:1----%e= [1.231235e+02]2----%20.7e= [ 1.2312346e+02]3----%020.7e= [00000001.2312346e+02]4----%-20.7e= [1.2312346e+02 ]"""
%g:根据显示内容选择格式:
规则为:指数小于-4,或者 指数大于等于精度 使用指数格式e,其他情况使用小数格式f
"""#%g:默认精度为6根据显示内容选择格式:规则为:指数小于-4,或者 指数大于等于精度 使用指数格式e,其他情况使用小数格式f举例:a = 123456.123456789a = 123456.123456789 = 1.23456123456789e+05 指数为5"""a = 123456.123456789# # %g 精度默认为6位,a的指数为5,使用小数格式fprint('1----%g=','[%g]' % (a,)) # %10.2g 精度为2,a的指数为5,使用指数格式eprint('2----%10.2g=','[%10.2g]' % (a,)) # %.4g 精度为4,a的指数为5,使用指数格式eprint('3----%.4g=','[%.4g]' % (a,)) # %020.7g 精度为7,a的指数为5,使用小数格式fprint('4----%020.7g=','[%020.7g]' % (a,)) # %020.7g 精度为7,a的指数为5,使用小数格式fprint('5----%-20.7g=','[%-20.7g]' % (a,)) """1----%g= [123456]2----%10.2g= [ 1.2e+05]3----%.4g= [1.235e+05]4----%020.7g= [000000000000123456.1]5----%-20.7g= [123456.1 ]"""
2.3:字符串输出:
'''%s%10s ——右对齐,占位符10位%-10s ——左对齐,占位符10位%.2s ——截取2位字符串%10.2s ——10位占位符,截取两位字符串'''s = 'abcdef'print('1--[%s]=','[%s]' % s)print('2--[%10s]=','[%10s]' % s)print('3--[%-10s]=','[%-10s]' % s)print('4--[%.2s]=','[%.2s]' % s)print('5--[%10.2s]=','[%10.2s]' % s)print('6--[%-10.2s]=','[%-10.2s]' % s) """1--[%s]= [abcdef]2--[%10s]= [ abcdef]3--[%-10s]= [abcdef ]4--[%.2s]= [ab]5--[%10.2s]= [ ab]6--[%-10.2s]= [ab ]"""
3: 字符串格式化方法调用:format()
格式:{fieldname component !conversionflag : formatspec} (表3)
formatspec格式:[[fill]align][sign][#][0][width][,][.precision][typecode] (表4)
fieldname
# 参数出现的位置,顺序可以打乱。print('1----:age:{1},name:{0} '.format('ixusy88',18)) # 参数出现的位置,默认相对位置print('2----:name:{},age:{} '.format('ixusy88',18)) # 关键字参数 print('3----:name:{name},age:{age} '.format(name='ixusy88',age=18)) # 关键字参数,顺序可以打乱。print('4----:age:{age},name:{name}'.format(name='ixusy88',age=18)) import sys# 属性,字典print('5----:平台:{0.platform} ;name:{1[name]},age:{1[age]}'.format(sys,{'name':'ixusy88','age':18}))print('6----:第二个是:{0[1]},第一个是:{0[0]}'.format([11,22,33])) #解包st = (10,20,30,)print('7----:第二个是:{1},第一个是:{0}'.format(*st)) lst = [100,200,300]print('8----:第二个是:{1},第一个是:{0}'.format(*lst)) """结果:1----:age:18,name:ixusy88 2----:name:ixusy88,age:18 3----:name:ixusy88,age:18 4----:age:18,name:ixusy885----:平台:win32 ;name:ixusy88,age:186----:第二个是:22,第一个是:117----:第二个是:20,第一个是:108----:第二个是:200,第一个是:100"""
整数:
# 整数a = 100print('1----[{0}]'.format(a))#最小显示10位,默认右对齐print('2----[{0:10}]'.format(a))#最小显示10位,左对齐print('3----[{0:<10}]'.format(a)) #最小显示10位,居中print('4----[{0:^10}]'.format(a)) #最小显示10位,居中,使用字符d填充剩下的print('5----[{0:d^10}]'.format(a)) #,逗号,千分为分隔符print('6----[{0:,d}]'.format(999999)) """结果:1----[100]2----[ 100]3----[100 ]4----[ 100 ]5----[ddd100dddd]6----[999,999]"""
浮点数:
a = 1234567.123456789#a = 1234567.123456789 = 1.234567123456789e+06print('1----:','[{0:f}]'.format(a))# 最小显示10位,2位精度,默认右对齐print('2----:','[{0:10.2}]'.format(a))# 最小显示10位,2位精度,左对齐print('3----:','[{0:<10.2}]'.format(a))# 最小显示10位,2位精度,居中print('4----:','[{0:^10.2}]'.format(a))# 使用字符m填充剩下的print('5----:','[{0:m^10.2}]'.format(a)) """1----: [1234567.123457]2----: [ 1.2e+06]3----: [1.2e+06 ]4----: [ 1.2e+06 ]5----: [m1.2e+06mm]"""
二进制,八进制,十六进制:
a = 100# '#' 号会加前缀 print('二进制:{0:b},{0:#b}'.format(a))print('八进制:{0:o},{0:#o}'.format(a))print('十六进制:{0:x},{0:#x}'.format(a))"""二进制:1100100,0b1100100八进制:144,0o144十六进制:64,0x64"""
4:format的用法变形: f'{name}'
f'{name}':
可以在字符串前加f以达到格式化的目的,在{}里加入变量,在{}里面,可以像在代码块中一样使用此变量(比如调用属性,方法,把它作为其他函数的参数等)
# 1: a.format(b)print('1----:','a.format(b):')s1 = 'Hello's2 = 'World'print('2----:','{0} {1} '.format(s1,s2)) print('**************')"""f'{name}':可以在字符串前加f以达到格式化的目的,在{}里加入变量名,在{}里面,可以像在代码块中一样使用此变量(比如调用属性,方法,把它作为其他函数的参数等)"""s1 = 'Hello's2 = 'World'print('3----:',f'{s1} {s2}')print('4----:',f'{len(s1)} {s2.count("o")} {s2.upper()}') # 还可以使用函数 name = 'ixusy88'age = 18sex = 'Man'job = "IT"salary = 8888.9868 # 调用它的方法;作为函数的参数print('5----:',f'my name is {name.capitalize()}. the len of {name} is {len(name)}')# 也可以使用相应的格式print('6----:',f'I am {age:*^10} years old.')print('7----:',f'I am a {sex}')print('8----:',f'My salary is {salary:10.3f}') # 还可以在{} 中进行if判断print('9----:',f'sex is {"男" if sex == "Man" else "女"}') import sysprint('10----:',f'Platform is {sys.platform}') st = ('123','345','567',)print('11----:',f'{st}')# 取某个元素print('12----:',f'{st[0]}') dic = {'name':'ixusy88','age':18}print('13----:',f'dic={dic},age={dic["age"]}')# 推导式:print('14----:',f'{[x for x in st]}') """输出结果:1----: a.format(b):2----: Hello World **************3----: Hello World4----: 5 1 WORLD5----: my name is Ixusy88. the len of ixusy88 is 76----: I am ****18**** years old.7----: I am a Man8----: My salary is 8888.9879----: sex is 男10----: Platform is win3211----: ('123', '345', '567')12----: 12313----: dic={'name': 'ixusy88', 'age': 18},age=1814----: ['123', '345', '567']"""