格式化操作符%

在c语言中格式化操作符是%,如我们经常通过如下语句格式化一个字符串输出


printf("my name is %s,now my age is %d","NetEase",20);

在python中格式化操作符也是%,因此上述代码转为python就是这样的:


print"my name is %s,now my age is %d"%("NetEase",20)

其中%s表示为一个字符串,%d表示为一个整数,这和C语言中是一样的。关于python中格式化操作符更多详细的介绍大家可以参看这个

不过在python中除了格式化操作符%来格式化字符串外,python还提供了一个format函数用来格式化字符串,而且功能更为强大,因此不推荐大家使用%这种方式

字符串格式化函数str.format()

format函数通过在字符串中的{}内指定要格式化的操作,用的比较多的是两种操作,一种是格式化替换字符串中的指定内容,一种是使用固定宽度对齐文本。其中格式化操作替换字符串中的指定内容可以通过位置,名称,下标等方式进行格式化替换。还是以开头的例子来说明

通过位置替换:


print"my name is {0},now my age is {1}".format("NetEase",20)

通过位置替换{}中指定的数字的位置和format中参数位置一一对应

通过名称替换

print "my name is {name},now my age is {age}".format(age=20, name="NetEase")


通过名称替换{}中的名称可以和format参数中的名称位置不对应,但是和名称是一一对应

通过下标替换


li=['NetEase',20]
print"my name is {0[0]},now my age is {0[1]}".format(li)

通过下标替换就是先把要替换的参数放到list中保存,然后通过list下标形式进行替换,其中{0[0]}表示format参数中的第0个位置参数list的第0个元素,{0[1]}表示format参数中的第0个位置参数list的1个元素,即先通过位置然后通过下标替换

另一个可能会用到的就是格式化时保留字符串的引号{!r}


print"my name is {!r},now my age is {age}".format("NetEase",age=20)

输出为 my name is ‘NetEase’,now my age is 20

使用固定宽度对齐文本

很多时候我们希望在每行输出的多列字符串的每一列能够保持某一个固定的宽度,如果字符串的宽度比这个宽度小,就用空格或其他字符填充以保持输出的美观性,同时还可以指定每一列左/右对齐/居中对齐,视觉上类似windows文件夹的效果:

format函数就可以让我们输出的字符串达到这种每一列固定长度同时指定对齐方式的效果,使用方式为'{format_spec}’.format(args),其中format_spec格式如下:

format_spec 格式为 [[fill]align][sign][#][0][width][,][.precision][type],其中fill,align,width这3个参数使用较多,fill表示填充字符,align表示对齐方式,width表示宽度,其余参数使用不是很频繁,因此简化下上述格式为[[fill]align][width],因此总的格式为{index:[[fill]align][width]}.format(args),其中index表示args参数的位置,fill参数可以是任意字符,align参数可以为<(左对齐),>(右对齐),^(居中),=(使用不多,不做介绍),下面看个示例:


print'{0: <22},{1: ^20},{2: >20},'.format("欢迎访问","huqi.tk","welocme to huqi.tk")

输出为:

我们来分析下这个格式化表达式,第一个{0: <22}中0表示format参数中的第0个参数,即”欢迎访问”,空格是填充字符,<表示左对齐,22表示宽度为22,不足22用填充字符空格填充。{1: ^20}中1表示format参数中的第1个参数,即”huqi.tk”,余下以此类推。

因为这种对齐需求还是挺常用的,因此python对字符串专门提供了用来实现类似功能的函数,即字符串的输出宽度对齐函数