Python格式化字符串(格式化输出)

Python提供“%”格式化输出各种类型的数据,如以下代码:
price=108
print("thebook'spriceis%s"%price)在上述程序中 print 函数包括以下三个部分,第一部分是格式化字符串(相当于字符串模板),格式化字符串包含“%”s“占位符,它将被第三部分的变量或表达值所取代;第二部分固定使用“%”作为分隔符。
格式化字符串中的“%”s被称为转换说明符(Conversion Specifier),它的功能相当于一个占位符,它将被后面的变量或表达值所取代。“%s指定使用变量或值 str() 函数转换为字符串。
如果格式化字符串包含多个“%”s“占位符,第三部分也应相应地提供多个变量,并使用圆括号来包括这些变量。例如,以下代码:
user="Charli"
age=8
#格式化字符串有两个占位符,第三部分提供两个变量
print("%sisa%syearsoldboy"%(user,age))只能在格式化字符串中使用“%”吗?s还有其他转换说明符吗?如果只有“%”s”这种形式,Python 格式化功能也太单一了。
实际上, Python 提供以下转换说明:
在使用上述转换说明符时,可以指定转换后的最小宽度,如以下代码:
num=-28
print("numis:%6i"%num)
print("numis:%6d"%num)
print("numis:%6o"%num)
print("numis:%6x"%num)
print("numis:%6X"%num)
print("numis:%6s"%num)运行上述代码时,可以看到以下输出结果:
numis:-28 numis:-28 numis:-34 numis:-1c numis:-1C numis:-28
从上述输出结果可以看出,此时指定字符串的最小宽度为 6.因此,当程序转换值时,总宽度为 6.程序自动在数值前添加三个空间。
默认情况下,转换后的字符串总是右对齐,不够宽的时候左补充空间。Python 也允许在最小宽度之前添加一个标志来改变这种行为,Python 支持以下标志:
-:指定左对齐。
+:表示值总是带有符号(正数带“+”,负数带“-”)。
0:这意味着不补充空间,而是补充空间 0。
例如下面的代码
num2=30
#最小宽度为0,左补0
print("num2is:%06d"%num2)
#最小宽度为6,左边补0,总带符号
print("num2is:%+06d"%num2)
#最小宽度为6,右对齐
print("num2is:%-6d"%num2)运行上述代码时,可以看到以下输出结果:
num2is:000030 num2is:+00030 num2is:30
转换浮点数,Python 还允许指定小数点后的数字位数:如果转换为字符串,Python 转换后允许指定字符串的字符数。该标志称为精度值,放置在最小宽度后,在中间使用点 () 分开。例如,以下代码:
my_value=3.001415926535
#最小宽度为8,小数点后保留3位
print("my_valueis:%8.3f"%my_value)
#最小宽度为8,小数点后保留3位,左侧补0
print("my_valueis:%08.3f"%my_value)
#最小宽度为8,小数点后保留3位,左侧补0,始终带符号
print("my_valueis:%+08.3f"%my_value)
the_name="Charlie"
#只保留三个字符
print("thenameis:%.3s"%the_name)#输出Cha
#只保留两个字符,最小宽度10
print("thenameis:%10.2s"%the_name)运行上述代码时,可以看到以下输出结果:
my_valueis:3.001 my_valueis:0003.001 my_valueis:+003.001 thenameis:Cha thenameis:Ch
