format OR %
提到Python中的格式化输出方法,一般来说有以下两种方式:
print('hello %s' % 'world')
# hello world
print('hello {}'.format('world'))
# hello world
到底哪种好呢,反正对我来说,用了.format()之后就再也不想用%了。
format()不用理会数据类型,%s,%f等等我记不完;
format()功能更丰富,填充方式,对齐方式都很灵活,让你的打印效果更美观;
format()是官方推荐的,%指不定就在未来版本中给废弃掉了。
基本用法
print('{} {}'.format('hello', 'world')) # 最基本的
print('{0} {1}'.format('hello', 'world')) # 通过位置参数
print('{0} {1} {0}'.format('hello', 'world')) # 单个参数多次输出
"""输出结果
hello world
hello world
hello world hello
"""
关键词定位
# 通过关键词参数
print('我的名字是{name},我今年{age}岁了。'.format(name='小明', age='12'))
# 与位置参数一样,单个参数也能多次输出
print('{name}说:"我的名字是{name},我今年{age}岁了。"'.format(name='小明', age='12'))
"""输出结果
我的名字是小明,我今年12岁了。
小明说:"我的名字是小明,我今年12岁了。"
"""
可变参数
既然format()是一个方法,那是不是也接受*args和**kwargs形式的传参呢,答案是肯定的。
# 传入list
data = ['hello', 'world']
print('{0} {1}'.format(*data))
# 传入dict
data = {'name': '小明', 'age': 12}
print('我的名字是{name},我今年{age}岁了。'.format(**data))
# 混用
data_1 = ['hello', 'world']
data_2 = {'name': '小明', 'age': 12}
print('{0} {1} 我的名字是{name},我今年{age}岁了,{0}!'.format(*data_1, **data_2))
"""输出结果
hello world
我的名字是小明,我今年12岁了。
hello world 我的名