第四篇:白话tornado源码之褪去模板外衣的前戏

Posted bigdata_devops

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四篇:白话tornado源码之褪去模板外衣的前戏相关的知识,希望对你有一定的参考价值。

 

加班程序员最辛苦,来张图醒醒脑吧!

...

...

...

好了,醒醒吧,回归现实看代码了!!

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

本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:

#!usr/bin/env python
#coding:utf-8
 
namespace = {\'name\':\'wupeiqi\',\'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 wupeiqi,age 18

上述代码解析:

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

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

 

 
 
 

以上是关于第四篇:白话tornado源码之褪去模板外衣的前戏的主要内容,如果未能解决你的问题,请参考以下文章

第五篇:白话tornado源码之褪去模板的外衣

第五篇:白话tornado源码之褪去模板的外衣

Python框架之Tornado (源码之褪去模板外衣)

第三篇:白话tornado源码之请求来了

第二篇:白话tornado源码之待请求阶段

前端:redux进阶之褪去react-redux的外衣