上一篇我们介绍了字符串格式运算符%来设置值得显示格式,今天我们讲一讲通过format函数来设置字符串格式。在带格式的字符串中,我们通过花括号将要替换的字段括起来,然后调用format将要设置格式的值替换进去。替换字段包括三部分:字段名,转换标志,格式说明符。字段名可以是索引或者标识符或者为空,转换标志跟在叹号后面,r表示repr,s表示str,a表示ascii,格式说明符跟在冒号后面,包括格式类型,字段宽度,数的精度。这三部分都是可选的,即花括号可以为空。 下列代码示例是替换字段的三个部分都为空的情况,格式字符串中的字段和format中的参数按照在顺序进行配对。
代码语言:javascript复制>>> '{},{}'.format(1,3)
'1,3'
下列代码示例是替换字段的字段名为索引,其余两部分都为空的情况,格式字符串中的字段和format中的参数按照在索引顺序进行配对进行配对,索引为0的花括号对应第一个参数1,所以被替换为1,索引为1的花括号对应第二个参数3,所以被替换为3。
代码语言:javascript复制>>> '{1},{0}'.format(1,3)
'3,1'
下列代码示例是替换字段的字段名为标志符和字段名为索引的混合使用的情况。
代码语言:javascript复制>>> '{a},{0}'.format(3,a=1)
'1,3'
注意当字段名为标志符和字段名为索引的混合使用时,在format的参数中,要将索引对应的参数放在前面,标志符对应的参数放后面,即上述例子中3在前面,a=1放后面,如下是反例,编译器已经报错。
代码语言:javascript复制 '{a},{0}'.format(a=1,3)
SyntaxError: positional argument follows keyword argument
下列代码示例是替换字段的字段名和转换标志以及格式说明符的使用。“ab”的原始字符串样子就是'ab',其str转换的样式是ab,二者在表示含有反斜杠的字符串时差别会比较明显。由于ab都是ASCII可以表示的字符,所以可以显示出来。
代码语言:javascript复制>>> '{a!r},{a!s},{a!a},{0:.3f}'.format(3,a="ab")
"'ab',ab,'ab',3.000"
下面的例子ASCII就表示不了了,所以显示的是Unicode码。
代码语言:javascript复制>>> '{a!r},{a!s},{a!a},{0:.3f}'.format(3,a="照")
"'照',照,'\u7167',3.000"
>>> '{a!r},{a!s},{a!a},{0:.3f}'.format(3,a="☑")
"'☑',☑,'\u2611',3.000"
上面讲了转换标志,下面再说一下格式说明符。下列代码示例是演示了格式说明符中的格式类型为f,宽度为6,精度为小数点后三位的情形。
代码语言:javascript复制>>> '{a:6.3f}'.format(a=3)
' 3.000'
注意上例中' 3.000'最前面是一个填充空格,正好六个字符的宽度。而下面的例子中宽度设置失效,因为精度加上小数点已经超过了设置的宽度。
代码语言:javascript复制>>> '{a:3.3f}'.format(a=3)
'3.000'
下面是在格式字符串中添加数字的千位分隔符的示例。
代码语言:javascript复制>>> '{a:15,}'.format(a=1000000000)
' 1,000,000,000'
当同时需要设置精度与宽度和千位分隔符时,千位分隔符在表示宽度的数字和表示精度的小数点之间。
代码语言:javascript复制'{a:19,.5f}'.format(a=1000000000.0000665005)
'1,000,000,000.00007'