第一章:文本-文本常量和模板-模板

1.1.2 模板
字符串模板是PEP292新增的部分,将作为内置拼接语法的替代做法。使用string.Template拼接时,要在名字前加前缀$来标识变量。或者,如果有必要区分变量和周围的文本,可以使用大括号包围变量。
下面这个例子对一个简单模板、使用%操作符的类似字符串拼接以及使用str.format()的新格式化字符串语法做了比较:

import string

values = {'var':'foo'}

t = string.Template("""
Varidable : $var
Escape : $$
Variable in text : ${var}iable
""")

print('TEMPLATE:',t.substitute(values))

s = """
Variable:%(var)s
Escape:%%
variable in text:%(var)siable
"""

print('INTERPOLATION:',s % values)

s = """
Variable:{var}
Escape:{{}}
Variable in text:{var}iable
"""

print('FORMAT:',s.format(**values)) 

在前两种情况中,触发字符($或%)要重复两次来进行转义。在格式化语法中,需要重复{和}来转义。
运行结果:
在这里插入图片描述
模板与字符串拼接或格式化的一个关键区别是,它不考虑参数的类型。值会转换为字符串,再将字符串插入结果。这里没有提供格式化选项。例如,没有办法控制使用几位有效数字来表示一个浮点数。
不过,这也有一个好处,通过使用safe_sunstitute()方法,就可以避免未能向模板提供所需的所有参数值时可能产生的异常。

import string

values = {'var':'foo'}

t = string.Template("$var is here but $missing is not provided")

try:
    print('substitute()  :',t.substitute(values))
except KeyError as err:
    print('ERROR:',str(err))

print('safe_substitute():',t.safe_substitute(values))

由于values字典中没有missing的值,所以substitute()会产生一个KeyError.safe_substitute()则不同,它不会抛出这个错误,而是会捕获这个错误并保留文本中的变量表达式。

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/86652664