简介
format是python中极其重要的函数,用来做字符串格式化,核心原理是在字符串中使用花括号{}来代表待替换的部分,类似占位符,然后把待替换的数据填充进对应的花括号中,以此完成对字符串的格式化。
format中允许多种不同的花括号形式,来支持对应数据的填充,接下来会简单介绍。
填充方式
按位置填充
直接举例讲解吧:
print('而{},{}的朋友,{}才是真正的英雄'.format('你', '我', '你'))
# 而你,我的朋友,你才是真正的英雄
花括号的数量跟后面参数的数量必须是一样的,后面的参数将会按照位置一一对应填充到前面的花括号里。
花括号数量 多于 参数数量,报错;
花括号数量 少于 参数数量,可以正常跑;
按数字填充
按数字填充的好处是,可以重复使用后面的参数。
print('而{1},{0}的朋友,{1}才是真正的英雄'.format('我', '你'))
# 而你,我的朋友,你才是真正的英雄
注意:
- 数字必须是大于0的整数
这里的0表示后面的第一个位置参数,1表示第二个位置参数,以此类推。
按关键字填充
按数字填充的话,后面需要配合的是位置参数。按关键字填充的话,后面配合的是关键字参数。
print('而{you},{my}的朋友,{you}才是真正的英雄'.format(my='我', you='你'))
# 而你,我的朋友,你才是真正的英雄
这种方式更加直观。不止可以重复使用后面的参数,后面参数是关键字参数的话,也就不用考虑参数的顺序之类的问题了。
混合填充
这个没啥好说的
print('而{you},{0}的朋友,{you}才是真正的英雄'.format('我', you='你'))
# 而你,我的朋友,你才是真正的英雄
使用时需要注意,关键字参数和位置参数的前后顺序关系。
字典/列表填充
直接举例:
name = ['我', '你']
name_dict = {'my': '我', 'you': '你'}
print('而{1},{0}的朋友,{1}才是真正的英雄'.format(*name))
print('而{you},{my}的朋友,{you}才是真正的英雄'.format(**name_dict))
print('而{you},{0}的朋友,{you}才是真正的英雄'.format(*name, **name_dict))
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄
其中,列表有个特殊用法,即结合方括号使用,举例:
name = ['我', '你']
print('而{0[1]},{0[0]}的朋友,{0[1]}才是真正的英雄'.format(name))
#而你,我的朋友,你才是真正的英雄
挺花里胡哨的,感觉不如.format(*name)
直观。
类变量填充
将需要替换的变量定义成类变量,在format里通过实例直接把对应的实例变量赋值给对应的花括号,注意,花括号里和类里的变量名必须是一样的。
class Name():
def __init__(self, my, you):
self.my = my
self.you = you
name = Name('我', '你')
print('而{0.you},{0.my}的朋友,{0.you}才是真正的英雄'.format(name))
print('而{p.you},{p.my}的朋友,{p.you}才是真正的英雄'.format(p=name))
print('而{.you}'.format(name))
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄
#而你
当只有一个字段的时候,就可以省略数字。
格式调整
字符串对齐
使用语法:
'{:待填充字符^宽度}.format()'
:宽度为5,居中对齐;'{:待填充字符<宽度}.format()'
:宽度为5,左对齐;'{:待填充字符>宽度}.format()'
:宽度为5,右对齐;
需要注意:
- 待填充字符只能是一个字符;
- 如果不指定待填充字符,如
:<5
,则默认使用空格填充。
举例:
print('{:0^5}'.format(1))
print('{:0<5}'.format(1))
print('{:0>5}'.format(1))
print('{:^5}'.format(1))
#00100
#10000
#00001
# 1
数字格式化
这些功能比较多,比如说还可以进行各种进制之间的转换,就不全面介绍了,只介绍一些十进制里比较常用的用法。
保留指定小数位数(自动四舍五入,也能实现科学计数法的转换):
print('{:.2f}'.format(12.3456)) # 12.35
print('{:.0f}'.format(12.56)) # 13
print('{:.2f}'.format(1.23e+5)) # 123000.00
千分位展示:
print('{:,}'.format(1000000)) # 1,000,000
百分比转换(自动转换百分比形式,并自动保留指定位小数):
print('{:.1%}'.format(0.31415)) # 31.4%
科学计数法转换:
print('{:.1e}'.format(100000000)) # 1.0e+08
不同进制之间的转换(如二进制b、八进制o、十六进制x、带0x开头的十六进制是#x等):
print('{:b}'.format(12)) # 1100