零基础学Python(第2版)
上QQ阅读APP看书,第一时间看更新

6.1.1 字符串的格式化

C语言使用函数printf()、sprintf()格式化输出结果,Python也提供类似的功能。Python将若干值插入带有“%”标记的字符串中,从而可以动态地输出字符串。字符串的格式化语法如下所示。


"%s" % str1
"%s %s" % (str1, str2)

【代码说明】第1行代码使用一个值格式化字符串。第2行代码使用多个值格式化字符串,用于替换的值组成一个元组。

下面这段代码演示了字符串的格式化操作。


01     # 格式化字符串
02     str1 = "version"
03     num = 1.0
04     format = "%s" % str1
05     print (format)
06     format = "%s %d" % (str1, num)
07     print (format)

【代码说明】

·第4行代码用变量str1的值替换字符串中的%s。

·第5行代码输出结果“version”。

·第6行代码分别用变量str1、num的值替换%s和%d的值。%d表示替换的值为整型。

·第7行代码输出结果“version 1”。

注意 如果要格式化多个值,元组中元素的顺序必须和格式化字符串中替代符的顺序一致,否则,可能出现类型不匹配的问题。如果将上例中的%s和%d调换位置,将抛出如下异常:


TypeError: int argument required

使用%f可以格式化浮点数的精度,根据指定的精度做“四舍五入”,示例如下:


01     # 带精度的格式化
02     print ("浮点型数字: %f" % 1.25)       # 以浮点数格式打印
03     print ("浮点型数字: %.1f" % 1.25)     # 精确到小数点后1位
04     print ("浮点型数字: %.2f" % 1.254)    # 精确到小数点后2位

【代码说明】

·第2行代码格式化浮点数1.25。默认情况下,将输出小数点后6位数字。输出结果:


浮点型数字: 1.250000

·第3行代码格式化小数点后1位数字,“四舍五入”后的结果为1.3。输出结果:


浮点型数字: 1.3

·第4行代码格式化小数点后2位数字。输出结果:


浮点型数字: 1.25

此外,Python还提供了对八进制、十六进制等数字进行格式化的替代符。表6-1列出了Python中格式化字符串的替代符及其含义。

表6-1 Python格式化字符串的替代符及其含义

注意 如果要在字符串中输出“%”,需要使用“%%”。

前面使用了元素格式化多个值,也可以用字典格式化多个值,并指定格式化字符串的名称。下面这段代码说明了字典格式化字符串的用法。


01     # 使用字典格式化字符串
02     print ("%(version)s: %(num).1f" % {"version": "version", "num": 2})

【代码说明】第2行代码定义了一个匿名字典,该字典中的两个value值分别对应字符串中的%(version)s和%(num).1f。输出结果:


version: 2.0

Python可以实现字符串的对齐操作,类似C语言中的“%[[+/-]n]s”。下面提供了字符串对齐函数。


01     # 字符串对齐
02     word = "version3.0"
03     print (word.center(20))
04     print (word.center(20, "*"))
05     print (word.ljust(0))
06     print (word.rjust(20))
07     print ("%30s" % word)

【代码说明】

·第3行代码调用center()输出变量word的值。在变量word两侧各输出5个空格。输出结果:


version3.0

·第4行代码调用center()输出变量word的值,并指定第2个参数的值为“*”。在变量word两侧各输出5个“*”。输出结果:


*****version3.0*****

·第5行代码调用ljust()输出变量word的值,ljust()令输出结果左对齐。输出结果:


version3.0

·第6行代码调用rjust()输出变量word的值,rjust()令输出结果右对齐。参数20表示一共输出20个字符,“version3.0”占10个字符,左边填充10个空格。输出结果:


     version3.0

·第7行代码,“%30s”表示先输出30个空格,再输出变量word的值,类似于word.rjust(30)的作用。输出结果:


             version3.0