0
点赞
收藏
分享

微信扫一扫

Python 字符串格式化之 .format()

目录

参数

数字格式化

转义


        自版本 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'

注:

  • ^<> 分别表示居中,左对齐,右对齐,其后数字表示宽度。 
  • 号后面带欲填充的字符,只能为一个,默认为空格。
  • 表示在正数前显示 +,负数前显示 -;  (空格)则表示在正数前加空格。
  • b、d、o、x 分别表示二进制、十进制、八进制、十六进制。

转义

        此外,还可以使用大括号 {} 来转义大括号:

>>> '{}'.format('abc')
'abc'

>>> '{{}}'.format('abc')
'{0}'

>>> '{{{}}}'.format('abc')
'{abc}'

>>> '{{{[1]}}}'.format('abc')
'{b}'
举报

相关推荐

0 条评论