本节书摘来自异步社区《python cookbook(第2版)中文版》一书中的第1章,第1.17节,作者[美]alex martelli , anna martelli ravenscrof , david ascher ,高铁军 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
任务
在python 2.4的环境下,你想完成这样的任务:给定一个字符串,通过查询一个字符串替换字典,将字符串中被标记的子字符串替换掉。
解决方案
python 2.4提供了一个新的string.template类,可以应用于这个任务。下面给出一段代码以展示怎样使用这个类:
讨论
python 2.3中,用于标记—替换的字符串格式被写为更加繁琐的形式:
标识符被放在一对括弧中,括弧前面一个%,后面一个s。然后,还需要使用%操作符,使用的格式是将需要处理的字符串放在%操作符左边并在右边放上字典:
当然,这样的代码在python 2.4中也可以正常工作。不过,新的string.template提供了一个更简单的替代方法。
当你创建string.template实例时,在字符串格式中,可以用两个美元符($)来代表$,还可以让那些需要被替换的标识后面直接跟上用于替换的文本或者数字,并用一对花括号({ })将它们括起来。下面是一个例子:
有时,为了给substitute准备一个字典做参数,最简单的方法是设定一些本地变量,然后将所有这些变量交给locals()(此函数将创建一个字典,字典的key就是本地变量,本地变量的值可通过key来访问):
另一个简单的办法是使用关键字参数语法而非字典,直接将值传递给substitute:
甚至可以同时传递字典和关键字参数:
为了防止字典的条目和关键字参数显式传递的值发生冲突,关键字参数优先。比如: