Python3中的格式化输出

Python3字符串格式化输出有两种形式实现:
a:字符串格式化表达式: '...%...' % (values)
b:字符串格式化方法调用:'...{}...'.format(values) 或者 f'...{xx}...'

1:字符串格式化的类型码(typecode)(表1)

image.png

2: 字符串格式化表达式

格式:%[(keyname)][flags][width][.precision]typecode (表2)
image.png

2.1:整数的输出

"""
%o —— oct 八进制
%d —— dec 十进制 
%x —— hex 十六进制
"""
 
# %d
a = 123
# 使用字典提供值
print('1---[%(age)d]=','[%(age)d]' % {'age':a} )
# %d
print('2---[%d]=','[%d]' % (a,))
# 前面带 '+' 号
print('3---[%+d]=','[%+d]' % (a,))
# 最小宽度,默认右对齐
print('4---[%5d]=','[%5d]' % (a,))
# 最小宽度,默认右对齐,左边补0
print('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:

#%f
a = 123.123456789
# 默认6位小数
print('1----%f=','[%f]' % (a,))
# 最小20位,7位小数,默认右对齐
print('2----%20.7f=','[%20.7f]' % (a,))
# 最小20位,7位小数,右对齐,左边补0
print('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:

#%e
a = 123.123456789
# 默认6位小数
print('1----%f=','[%e]' % (a,))
# 最小20位,7位小数,默认右对齐
print('2----%20.7f=','[%20.7e]' % (a,))
# 最小20位,7位小数,右对齐,左边补0
print('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.123456789
a = 123456.123456789 = 1.23456123456789e+05  指数为5
"""
a = 123456.123456789
# 
# %g 精度默认为6位,a的指数为5,使用小数格式f
print('1----%g=','[%g]' % (a,))
 
# %10.2g  精度为2,a的指数为5,使用指数格式e
print('2----%10.2g=','[%10.2g]' % (a,))
 
# %.4g  精度为4,a的指数为5,使用指数格式e
print('3----%.4g=','[%.4g]' % (a,))
 
# %020.7g  精度为7,a的指数为5,使用小数格式f
print('4----%020.7g=','[%020.7g]' % (a,))
 
# %020.7g  精度为7,a的指数为5,使用小数格式f
print('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)
image.png

formatspec格式:[[fill]align][sign][#][0][width][,][.precision][typecode] (表4)
image.png

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:ixusy88
5----:平台:win32 ;name:ixusy88,age:18
6----:第二个是:22,第一个是:11
7----:第二个是:20,第一个是:10
8----:第二个是:200,第一个是:100
"""

整数:

# 整数
a = 100
print('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+06
print('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 = 18
sex = '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 sys
print('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 World
4----: 5 1 WORLD
5----: my name is Ixusy88. the len of ixusy88 is 7
6----: I am ****18**** years old.
7----: I am a Man
8----: My salary is   8888.987
9----: sex is  男
10----: Platform is win32
11----: ('123', '345', '567')
12----: 123
13----: dic={'name': 'ixusy88', 'age': 18},age=18
14----: ['123', '345', '567']
"""
01.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343