Python string Template
- Template是Python string模板中定义的一种字符串类型。
- 用途:用于字符串替换操作。
- 默认的定界符:$。
- 例子:
from string import Template
t = Template("CSDN ${name}")
print t.substitute({'name':'linduo'})
from string import Template
class LinduoTemple(Template):
"""doc for LinduoTemple"""
delimiter = '#'
def testTemple():
s = 'CSDN #name'
t = LinduoTemple(s)
d={'name':'linduo'}
print t.substitute(d)
print LinduoTemple.delimiter
print Template.delimiter
if __name__ == '__main__':
testTemple()
- Python中String Template的用途挺多的。例如,Chromium中对于Java(WebView)的JNI接口生成脚本(jni_generator.py)中,就是利用Template进行字符替换。下面一小段例子。
def GetClassPathLines(self, classes, declare_only=False):
"""Returns the ClassPath constants."""
ret = []
if declare_only:
template = Template("""\
extern const char kClassPath_${JAVA_CLASS}[];
""")
else:
template = Template("""\
JNI_REGISTRATION_EXPORT extern const char kClassPath_${JAVA_CLASS}[];
const char kClassPath_${JAVA_CLASS}[] = \
"${JNI_CLASS_PATH}";
""")
for full_clazz in classes.itervalues():
values = {
'JAVA_CLASS': GetBinaryClassName(full_clazz),
'JNI_CLASS_PATH': full_clazz,
}
ret += [template.substitute(values)]
class_getter = """\
#ifndef ${JAVA_CLASS}_clazz_defined
#define ${JAVA_CLASS}_clazz_defined
inline jclass ${JAVA_CLASS}_clazz(JNIEnv* env) {
return base::android::LazyGetClass(env, kClassPath_${JAVA_CLASS}, \
&g_${JAVA_CLASS}_clazz);
}
#endif
"""
if declare_only:
template = Template("""\
extern base::subtle::AtomicWord g_${JAVA_CLASS}_clazz;
""" + class_getter)
else:
template = Template("""\
// Leaking this jclass as we cannot use LazyInstance from some threads.
JNI_REGISTRATION_EXPORT base::subtle::AtomicWord g_${JAVA_CLASS}_clazz = 0;
""" + class_getter)
for full_clazz in classes.itervalues():
values = {
'JAVA_CLASS': GetBinaryClassName(full_clazz),
}
ret += [template.substitute(values)]
return '\n'.join(ret)