str.format的意义:
为了得到我们需要格式的数据,格式化输出。
str.format方法介绍:
1、通过字符串中的花括号{}来识别替换字段,从而完成字符串的格式化。
2、替换的内容包括:字段名、格式说明符三部分,形式一般为:{字段名:格式说明符}
1、简单实现方法
1.1 省略不写:花括号内省略不写,代表传递位置参数
- 替换字段形式{}
- 注意事项:花括号个数少于等于后面的位置参数的个数,多了会报错
# 用{}代表占位符,直接位置传参
print('我是{},喜欢{}!'.format('灭霸','打响指'))
# 我是灭霸,喜欢打响指!
# {}数量必须少于后面位置参数数量,不然报错
print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头','放空大','小短腿'))
print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头'))
# 报错误:IndexError: tuple index out of range
1.2 数字形式传参:通过位置索引值传递位置参数
- 索引从整数0开始
- 索引可以重复引用,输出
- 索引可以不按照传输顺序
- 索引数值就是后面位置参数放入一个元组来取值的过程,所以索引数值不能大于元组里面位置参数的最大索引值,否则报错
print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18,'15cm'))
# 我身高180cm,年龄正好18,15cm长。
print('我身高{0},{0}不多不少,年龄正好{1}。'.format('180cm',18))
# 我身高180cm,180cm不多不少,年龄正好18。
print('我身高{1},{1}不多不少,年龄正好{0}。'.format('180cm',18))
# 我身高18,18不多不少,年龄正好180cm。
print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18))
# IndexError: tuple index out of range
# 索引值大于format()内的最大位置数
1.3 变量名{关键字} 传递输出参数
- 特别注意,关键字的变量名在参数那里无需加引号,同时{}里面引用直接填变量名。
print('我的名字叫{name},我其实是一名{career}!'.format(name='尹天仇',career='演员'))
# 我的名字叫尹天仇,我其实是一名演员!
print('我叫{name2},又名{name1},我弟弟叫{name3}!'.format(name1='至尊宝',name2='秦汉',name3='秦祥林'))
# 我叫秦汉,又名至尊宝,我弟弟叫秦祥林!
1.4 {}、{0}、{name}混合使用
- 位置参数在前,关键字参数在后
- 但注意!!{}不能与数字形式{0}同时使用,但可以和关键字参数同时使用
print('吹个{0},吹个{2},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹个大气球,吹大了气球,玩球球!
print('吹个{},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹大了气球,玩球球!
print('吹个{0},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹大了气球,玩球球!
print('吹个{0},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
#报错 ValueError: cannot switch from manual field specification to automatic field numbering
2、使用元组和字典传参:
- str.format()方法可以使用*元组和**字典的形式传参,可以混用。
- 方法相当于*args和**kwargs打散传参,元组按位置或索引传参,字典按关键字传参(键)。
- 位置参数、关键字参数、*元组、**字典也可以同时使用,但要注意位置参数在关键字参数前,*元组要在**字典前。
- 使用元组或者字典格式化输出的形式就是相当于将元组和字典打散,变成位置参数们和关键字参数们然后按照前面的方法传参就行
print('我喜欢{},喜欢{},同时也喜欢{}!'.format(*('篮球','足球','观球')))
# 我喜欢篮球,喜欢足球,同时也喜欢观球!
print('我喜欢{0},喜欢{1},同时也喜欢{2}!'.format(*('篮球','足球','观球')))
# 我喜欢篮球,喜欢足球,同时也喜欢观球!
# 字典
print('{name}的女朋友是{gf},我也喜欢{gf}!'.format(**{'name':'钢铁侠','gf':'小辣椒'}))
# 钢铁侠的女朋友是小辣椒,我也喜欢小辣椒!
# 元组+字典
print('我是{beauty}的{1},我们都喜欢{0},请大家{2}!'\
.format(*('球类','球迷','文明观球'),**{'beauty':'斯嘉丽约翰逊',}))
# 我是斯嘉丽约翰逊的球迷,我们都喜欢球类,请大家文明观球!
# 位置参数、关键字参数、元组、字典混合使用:
print('我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜欢{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可爱 >>>: {love}!'\
.format('武汉',name='苏光体',age=18,*('读书','健身','折腾数码'),**{'only_one':'杨林','love':'苏弘睿'}))
# 我是苏光体,好像18了 ^_^,在武汉,等你哦!
# 喜欢读书、健身和折腾数码。
# 我的唯一 >>>:杨林
# 我的小可爱 >>>: 苏弘睿!
3、对象参数格式化输出传值:
- formate还可以使用对象属性传参,这个对象可以是实例化的对象,也可以是列表、字典
# 对象属性传参
# 实例化对象:
class Dog:
def __init__(self,name,speak):
self.name=name
self.speak=speak
dog1=Dog('小黄','汪汪汪')
print('我的{0.name}会{0.speak}。'.format(dog1))
# 我的小黄会汪汪汪。
# 文件对象
with open('text.txt','wb') as f:
print('打开的文件名为:{0.name}'.format(f))
# 打开的文件名为:text.txt
# 列表、字典对象
print('I have a {0[0]} , I have a {0[1]} .'.format(['Apple','Pen']))
print('我叫{0[name]},{0[id]}就是我!'.format({'name':'阿星','id':'9527'}))
print('{1[name]}变成了{0[0]},藏进了{1[role]}的裤裆里,为什么不变{0[1]}而是{0[0]}呢?'.format(['葡萄','苹果'],{'name':'菩提老祖','role':'至尊宝'}))
# I have a Apple , I have a Pen .
# 我叫阿星,9527就是我!
# 菩提老祖变成了葡萄,藏进了至尊宝的裤裆里,为什么不变苹果而是葡萄呢?
4、格式说明符:规定传入参数字符的格式
- 比如
print('{0:.4f}'.format(3.1415926))
#在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
- 还有其他一些规格之类的,但暂时还没有用到就先转载到这里。一般来说,如果不是特别使用到format的话,上面的差不多就够了。
本文详细介绍了Python中str.format()方法的使用技巧,包括基本语法、位置参数、关键字参数、混合使用、元组和字典传参、对象属性传参以及格式说明符的应用。

550

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



