第一种方法:“旧式”字符串格式化
通过%操作符进行位置格式化,如下所示:
>>> number = 20190827
>>> name = 'Lily'
>>> "Hello %s, your number is %x." % (name, number)
'Hello Lily, your number is 134166b.'
还能将别名传给%操作符,按名称替换变量,这样不必确保字符串值得传递顺序与格式化字符串中名称的引用顺序一致。
>>> "Hello %(name)s, your number is %(number)x." % {
... "name":name,
... "number":number}
'Hello Lily, your number is 134166b.'
第二种方法:“新式”字符串格式化
在字符串对象上调用format()函数,执行简单的位置格式化。
>>> "Hello {}, your number is {:x}." .format(name, number)
'Hello Lily, your number is 134166b.'
与第一种方法类似,这种方法也能用别名以任意顺序替换变量。
>>> "Hello {name}, your number is {number:x}." .format(
... name=name,
... number=number)
'Hello Lily, your number is 134166b.'
第三种方法:字符串字面值插值
采用这种方法,可以在字符串常量内使用嵌入的Python表达式。,如下示例还能内联算数运算:
>>> a = 5
>>> b = 10
>>> f'Five plus ten is {a + b} and not {2 * (a + b)}.'
'Five plus ten is 15 and not 30.'
本质上,格式化字符串字面值是Python解析器的功能:将f字符串转换成一系列字符串常量和表达式,然后合并起来构建最终的字符串。
同时,字符串字面值也支持str.format()方法所使用的字符串格式化语法。
>>> f'Hello {name}, your number is {number:#x}.'
'Hello Lily, your number is 0x134166b.'
第四种方法:模板字符串
先看效果:
>>> from string import Template
>>> templ_string = 'Hello $name, your number is $number.'
>>> Template(templ_string).substitute(
... name=name,
... number=hex(number))
'Hello Lily, your number is 0x134166b.'
- 需要从Python的内置字符串模块中导入Template类
- 模板字符串不能使用格式说明符,需要手动转换
- 当用来处理程序用户生成的格式字符串时,这个简单的模板字符串机制比较安全