namespace = {'name':'sda','age':[12,46,24],} code = """def say(): return 'name %s, age %d'%(name,age[0])""" func=compile(code,"<string>","exec"); exec(func,namespace) #将func函数放到字典中,与字典中的其他数据共用一个作用域 #namespace = {'name':'sda','age':[12,46,24],func} ret = namespace['say']() #执行函数 print(ret)
其中tornado框架模板引擎本质也是类似。使用字符串分割,将原来代码,改写成python格式的字符串,然后通过上面类似方案进行代码执行返回