
2.5.3 格式化字符串
字符串中除了用“\”表示转义符外,还可以进行其他一些格式化。所谓格式化就是在字符串中预留一段位置(或者称为占位符),等以后需要的时候再用其他数据进行替换和填补,相当于把其他数据放到预留的位置,并作为字符串的一部分。Python中对字符串的格式化有两种,一种是字符串的format()方法,另一种是用通配符“%”格式化。
1.format()方法格式化
字符串的format()方法用于格式化字符串,其格式为format(*args,**kwargs),其中*args表示接受任意多个参数,args参数放到一个元组中;**kwargs表示接受任意多个参数,kwargs放到一个字典中。关于任意多个参数的解释详见第3章自定义函数的内容。使用format()方法需要先定义模板,在模板中添加一对或多对“{}”,表示模板中的占位,然后用format()中的参数代替模板中的“{}”。例如下面的代码,在template中有三对“{}”,分别用format(str1,str2,str3)中的str1、str2、str3依次代替template中的三对“{}”,这种方式是自动替换。

format(str1,str2,str3)中的参数str1、str2、str3放到一个元组中,str1、str2、str3在元组中的索引(index)分别为0、1、2,在模板template的“{}”中可以放置参数的索引,这样参数与“{}”不必按顺序对应,这种方式是指定替换,例如下面的代码。

还可以使用参数名称来进行指定替换,例如下面的代码。

需要注意的是,自动替换和指定替换不能混合在一起使用,例如模板"我爱你{},我爱你{1},我爱你{0}"是有问题的。
在模板中的占位符“{}”中,特别是对数值型数据,可以设置更多的格式符号,基本格式如下,其中[]中内容表示可选项,冒号“:”表示后面的内容是格式化符号。
{[index][:[[fill]align][sign][#][0][width][option][.precision][type]}
中文释义为:
{[索引][:[[填充]对齐方式][正负号][#][0][宽度][选项][.精度][格式类型]}
各项的意义如下:
- index是参数列表中参数的索引值,从0开始。如果省略index,则按照参数列表的先后顺序和“{}”的先后顺序依次替换。
- 冒号“:”表示后面的内容是格式化符号。
- fill用于指定空白处填充的字符,只能是一个字符,默认为空格,如果选择fill,同时也必须选择align。
- align用于指定对齐方式,可以取<、>、=和^。<表示左对齐;>表示右对齐;=只对数字有效,表示右对齐;^表示居中。align需要与width配合使用。
- sign用于指定是否显示正负号,可以取“+”“-”和空格,sign取“+”表示正数前显示“+”,负数前显示“-”;sign取“-”表示正数显示不变,负数显示“-”;sign取空格表示正数前显示空格,负数前显示“-”。
- #表示在二进制、八进制和十六进制数前面分别加0b、0o和0x。
- 0表示右对齐,正数前无符号,负数前显示负号,用0填充空白处。需与width一起使用。
- width表示数据的宽度。
- option可以选择逗号“,”和下画线“_”,逗号表示对数字以千为单位进行分隔,下画线表示对浮点数和d类型的整数以千为单位进行分隔。对于b、o、x和X类型,每四位插入一个下画线,其他类型都会报错。
- .precision表示小数点后的位数。
- type用于指定格式类型,其格式符和意义如表2-2所示。
表2-2 格式符和意义

以下是各种格式的实例:

Python的字符串方法中,还有个format_map()方法,这个方法只用于将字典加入到字符串的格式化中,而format()适合所有的情况。format_map()的参数不需传入“关键字=真实值”,而是直接传入字典键,通过键传入值。下面是用format()和format_map()处理字典值的情况。

2.通配符“%”格式化
以通配符“%”格式化是指在模板中以%为标识的一段占位,而不是用“{}”表示占位,%后面符号是格式符,例如下面的代码:

或者:

通配符“%”格式化的格式为:
%[-][+][0][width][.precision]type
各项的意义如下:
- -表示左对齐,正数前无符号,负数前显示负号。
- +表示右对齐,正数前显示正号,负数前显示负号。
- 0表示右对齐,正数前无符号,负数前显示负号,用0填充空白处。需与width一起使用。
- width表示字符占的宽度。
- .precision表示小数点的位数。
- type是格式类型,其格式符和意义如表2-3所示。
表2-3 格式符和意义

对于模板后的输出项,其前面也需要加“%”。如果有多个输出内容,需要把输出内容放到元组中,例如下面的代码:
