Python string Template

Python string Template

  • Template是Python string模板中定义的一种字符串类型。
  • 用途:用于字符串替换操作。
  • 默认的定界符:$。
  • 例子:
#!/usr/bin/env python
from string import Template

# define Template obj
t = Template("CSDN ${name}")

# string replace
print t.substitute({'name':'linduo'})
  • 修改默认定界符
#!/usr/bin/env python
from string import Template

class LinduoTemple(Template):
    """doc for LinduoTemple"""
    # modify delimiter 
    delimiter = '#'
    
def testTemple():
    # define temple obj
    s = 'CSDN #name'
    t = LinduoTemple(s)
    # string replace
    d={'name':'linduo'}
    print t.substitute(d)
    # output delimiter #
    print LinduoTemple.delimiter
     # output 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值