目录
参数
数字格式化
转义
自版本 2.6 开始,Python 新增一格式化字符串的函数—— .format(),大大增强了字符串格式化的功能。基本语法是通过槽( {} )和冒号( : )来代替之前的 % 。
format() 函数的参数灵活多变,可以不受个数的限制,其位置也可以不按顺序。
# 不指定位置,默认自左而右顺序
>>> '{} {} {} {} {}'. format ('Together', 'for', 'a', 'Shared', 'Future')
'Together for a Shared Future'
# 指定位置
>>> '{0} {1} {4}'. format ('Together', 'for', 'a', 'Shared', 'Future')
'Together for Future'
注意:位置的索引为自 0 开始,正向递增。
也可以设置参数:
# 通过赋值设置参数
>>> '姓名:{name},性别:{sex},年龄:{age}岁'. format(name = '张三', sex = '男', age = '3')
'姓名:张三,性别:男,年龄:3岁'
# 通过字典设置参数
>>> info = {'name' : '张三', 'sex' : '男', 'age' : 3}
>>> '姓名:{name},性别:{sex},年龄:{age}岁'. format(**info)
'姓名:张三,性别:男,年龄:3岁'
# 通过列表索引设置参数
>>> l = ['张三', '男', 3]
>>> '姓名:{0[0]},性别:{0[1]},年龄:{0[2]}岁'. format(l)
'姓名:张三,性别:男,年龄:3岁'
注意,通过列表索引设置参数时,0 是必需的。
也可以向 str.format() 传入对象:
>>> class info(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
>>> someone = info('张三', '男', 3)
>>> '姓名:{0.name},性别:{0.sex},年龄:{0.age}岁'. format(someone)
'姓名:张三,性别:男,年龄:3岁'
数字格式化为数据处理之必需,下表展示了 .format() 格式化数字的多种形式:
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | '3.14' | 保留小数点后两位 |
3.1415926 | {:+.2f} | '+3.14' | 带符号,保留小数点后两位 |
-1 | {:+.2f} | '-1.00' | 带符号,保留小数点后两位 |
2.71828 | {:.0f} | '3' | 不带小数 |
5 | {:0>2} | '05' | 左边补零,宽度为2 |
5 | {:x<4} | '5xxx' | 右边补x ,宽度为4 |
1000000 | {:,} | '1,000,000' | 逗号分隔 |
0.5 | {:.2%} | '50.00%' | 百分数,保留小数点后两位 |
1000000000 | {:.2e} | '1.00e+09' | 指数 |
9 | {:>10} | ' 9' | 右对齐(默认,宽度为10) |
9 | {:<10} | '9 ' | 左对齐(宽度为10) |
9 | {:^10} | ' 9 ' | 中间对齐(宽度为10) |
13 | {:b} | '1101' | 二进制 |
{:d} | '13' | 十进制 | |
{:o} | '15' | 八进制 | |
{:x} | 'd' | 十六进制 | |
{:#x} | '0xd' | ||
{:#X} | '0XD' |
注:
此外,还可以使用大括号 {} 来转义大括号:
>>> '{}'.format('abc')
'abc'
>>> '{{}}'.format('abc')
'{0}'
>>> '{{{}}}'.format('abc')
'{abc}'
>>> '{{{[1]}}}'.format('abc')
'{b}'