Python最主要的字符串格式化输出主要有四种,在这分别介绍。
一、旧式字符串格式化
Python内置了一个独特的字符串操作方法,通过 % 操作符进行位置格式化。跟 C 中的 printf 很像。如下:
%s 格式说明符告诉 Python 在哪替换 name。
格式输出的字符也跟 C 一样,比如用 %x 输出十六进制:
这里使用了 %x 格式说明符将 int 值转换为字符串并将其表示为十六进制数。
由于 % 操作符只接受一个参数,如果要在单个字符串中进行多次替换,需要将字符串包装到右边的元组中,如下:
如果要将别名传递给 % 操作符,还可以在格式字符串中按名称替换变量。相当于字典。如下:
2、新式字符串格式化方法
Python3 引入了一种新的字符串格式化方式,后面又移植到了 Python2.7 中。可以免去 % 操作符,取而代之调用 format() 函数。
执行简单的位置格式化:
也可以用别名以任意顺序替换变量:
注意到,将 int 变量格式化为十六进制的语法变了,需要在变量名后面加上 :x 来传递格式规范。
3、字符串字面值插值(Python 3.6+)
Python 3.6 增加了另一种字符串格式化方法,叫做格式化字符串字面值( formatted string literal ),可以在字符串常量内使用嵌入的 Python 表达式。如下:
这种方式极其强大,可以嵌入任意的 Python 表达式,比如算术运算:
本质上,格式化字符串字面值是 Python 解析器的功能:将 f 字符串转换为一系列字符串常量和表达式,然后合并起来构建最终的字符串。
字符串字面值也支持 string.format() 所使用的的字符串格式化语法,如下:
4、模板字符串
模板字符串机制相对简单,也不是很强大,但是它很安全,适用于处理程序用户生成的格式字符串,其他方法有可能引起安全漏洞。
模板字符串需要从内置字符串模块中导入 Template 类。想详细了解的可以看一下官方文档。
经验法则:
如果格式字符串是用户提供的,使用模板字符串可以避免安全问题。如果不是,再根据 Python 版本选择:Python 3.6+ 使用字符串字面值,老版本则使用新式字符串格式化。
如果想详细了解,可以看一下原书。
reference:
《深入理解Python特性》 Dan Bader