Python框架之Tornado(四)源码之褪去模板外衣的前戏

执行字符串表示的函数,并为该函数提供全局变量

本篇的内容从题目中就能够看出来,就是为以后剖析tornado模板作准备,也是因为该知识点使用的巧妙,全部就单独用一篇来介绍了。废话很少说,直接上代码:html

#!usr/bin/env python
#coding:utf-8
  
namespace = {'name':'xs','data':[18,73,84]}
  
code =  '''def hellocute():return  "name %s ,age %d" %(name,data[0],) '''
  
func = compile(code, '<string>', "exec")
  
exec func in namespace
  
result = namespace['hellocute']()
  
print result

此段代码的执行结果是:name xs,age 18python

上述代码解析:web

  • 第6行,code是一个字符串,该字符串的内容是一个函数体。
  • 第8行,将code字符串编译成函数 hello
  • 第10行,将函数 hello 添加到namespace字典中(key为hello),同时也将python的全部内置函数添加到namespace字段中(key为__builtins__),如此一来,namespace中的内容比如是一个个的全局变量,即
name = xs
data = [18,73,84]
 
def hellocute():
    return  "name %s ,age %d" %(name,data[0],)
  • 第12行,执行Hello函数并将返回值复制给result
  • 第14行,输入result

这段代码用的非常巧妙有木有,亮瞎狗眼有木有,竟然把字符串变成了函数而且还为该函数提供了全局变量。对于该功能,它就是python的web框架中模板语言部分相当重要的部分,由于在模板处理过程当中,首先会读取html文件,而后分割html文件,再而后讲分割的文件组成一个字符串表示的函数,再再而后就是利用上述方法执行字符串表示的函数。框架

相关文章
相关标签/搜索