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


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中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值