巧用exec语句修改string.Template的delimiter

来源:互联网 发布:网络stp 编辑:程序博客网 时间:2024/05/19 14:01


http://jianpx.iteye.com/blog/899230

原文名字叫做:浅析python的string.Template


最终这篇文章没有解决修改模板类的参数的问题。

其实问题简单来说就是:能否在定义一个class的时候,在class创建的“第一时间”,将一个变量传进去。

这个“第一时间”在__init__函数之前,因为在Template这种用模板创建的类里,有些成员函数是在__init__之前就被赋值了

想出一个解决方案:


#!/usr/bin/python
#coding :utf-8
from string import Template

def CreateTemplate( s, delimiter=Template.delimiter ):
    _ret = None
    code = ''' 
class _mt(Template):
    delimiter = '%s'
_ret = _mt
    ''' % delimiter

    exec code
    print '?????????\n', _ret
    return _ret(s)


def _test():
    s = '#who likes #what'
    #t = MyTemplate(s, delimiter='#')
    t = CreateTemplate(s, delimiter='#')
    d = {'who': 'jianpx', 'what': 'mac'}
    print t.substitute(d)



if __name__ == '__main__':
    _test()


其实就是充分利用了exec这个语句,这在python中可是一个神语句哦~提供最大限度的灵活性,当然也毫无安全性和效率可言。


这个语句的用途还有很多,我个人非常喜欢,在实际项目中也用来解决一些疑难问题,比如解析C++头文件的定义到Python中。



0 0
原创粉丝点击