字符串格式化,就是将字符常量和变量相结合,同时控制其显示格式。在python中,支持多种字符串格式化的语法
1. printf 风格
类似C语言中sprintf函数的代码风格,用%占位符来表示变量,基本用法示意如下
>>> 'name : %s, age: %d' % ('andy', 24)'name : andy, age: 24'
%标识需要替换的变量位置,其中%s表示输出字符串,%d对应整数,后面为对应变量构成的元组。
百分号之后可以添加很多的修饰符号,按照顺序,列表如下
mapping key的用法如下
>>> 'name : %(name)s, age: %(age)d' % {'name' : 'andy', 'age' : 24}'name : andy, age: 24'
conversion flag取值范围包括 0, -, ,,+ 等,常和minimum filed width连用来发挥作用,用法如下
>>> 'age: %5d' % (24)
'age: 24'
# 0表示用0填充,仅针数值
>>> 'age: %05d' % (24)
'age: 00024'
# 空格表示在输出字符串前添加一个空格
>>> 'age: % 05d' % (24)
'age: 0024'
# 负号将对齐方式变为左对齐
>>> 'age: %-5d' % (24)
'age: 24 '
# 加号表示在正数前添加正好,在负数前添加负号
>>> 'age: %+5d' % (24)
'age: +24'
>>> 'age: %+5d' % -(24)
'age: -24'
precision控制显示的精度,主要用于控制浮点数,用法如下
# 默认小数点后6位>>> 'age: %f' % (3.1415)
'age: 3.141500'
# 通过精度修改为后两位
>>> 'age: %.2f' % (3.1415)
'age: 3.14'
2. format方法
format方法是字符串内置的方法,支持更加强大和灵活的格式化,用大括号{}作为占位符,基本用法如下
>>> "name:{}, age: {}".format('andy', 24)'name:andy, age: 24'
默认情况下,根据每个大括号的索引,将后面元组中的值依次带入,上面的写法等价于
>>> "name:{0}, age: {1}".format('andy', 24)'name:andy, age: 24'
除了位置索引,还可以用类似mapping key的方法,用法如下
>>> "name:{name}, age: {age}".format(name = 'andy', age = 24)'name:andy, age: 24'
>>> "name:{name}, age: {age}".format(age = 24, name = 'andy')
'name:andy, age: 24'
该方法的好处就是元组中的元素可以乱序,除了简单替换,该方法也支持格式化,在大括号中添加各种修饰符来实现,修饰符放在冒号:后面,按照顺序,列表如下
fill. align, width常连用来发挥作用,用法如下
# 字符串默认左对齐>>> "name:{:6}".format('andy')
'name:andy '
# 数值默认右对齐
>>> "age:{:6}".format(24)
'age:24'
# 指定填充字符,对齐方式
>>> "name:{:A<6}".format('andy')
'name:andyAA'
sign和grouping_option的用法如下
# sign>>> "age:{:+}".format(24)
'age:+24'
>>> "age:{:+}".format(-24)
'age:-24'
>>> "age:{:-}".format(24)
'age:24'
>>> "age:{:-}".format(-24)
'age:-24'
>>> "age:{: }".format(-24)
'age:-24'
>>> "age:{: }".format(24)
'age:24'
# grouping_option
# 用逗号分隔千分位
>>> 'number:{:,}'.format(1000000)
'number:1,000,000'
# 用下换线分隔
>>> 'number:{:_}'.format(1000000)
'number:1_000_000'
除了冒号修饰符,还支持实现对参数进行转换,用感叹号!加修饰符表示,用法如下
# 相当于调用repr函数>>> 'name:{!r}'.format('andy')
"name:'andy'"
# 相当于调用ascii函数
>>> 'name:{!a}'.format('andy')
"name:'andy'"
# 相当于调用str函数
>>> 'name:{!s}'.format('andy')
'name:andy'
感叹号修饰符仅支持上述三种转换,需要注意的是,感叹号和冒号修饰符不可连用。
3. f-string
在python3.6版本引入的新功能, 在字符串前面添加f前缀,同样用大括号作为占位符,与format方法不同的是,直接在大括号内书写需要格式化的变量,基本用法如下
>>> name = 'andy'>>> age = 24
>>> f'name:{name}, age:{age}'
'name:andy, age:24'
在变量名之后,和format方法类似,也支持感叹号对应的转换操作,和冒号开头的格式说明符,而且语法完全相同,示意如下
>>> f'name:{name:A<6}''name:andyAA'
f-string把变量和对应的格式化操作同时绑定在了一个大括号中,而format方法则分隔成了前后两个部分。单就从格式化的效率来看,f-string的运行速度更快。
f-string更加强大的地方,可以直接将表达式写在大括号里,用法如下
>>> f'name:{name.upper():a<6}'
'name:ANDYaa'
# 自定义函数
>>> f'name:{(lambda x: x.upper())(name):a<6}'
'name:ANDYaa'
这样,可以进一步减少代码量。如果你的python版本在3.6以上,建议使用f-string来格式化字符串。
·end·
—如果喜欢,快分享给你的朋友们吧—
关注我们,解锁更多精彩内容!