第四篇:白话tornado源码之褪去模板外衣的前戏
2015-06-21 23:22
337 查看
加班程序员最辛苦,来张图醒醒脑吧!
...
...
...
好了,醒醒吧,回归现实看代码了!!
此段代码的执行结果是:name wupeiqi,age 18
上述代码解析:
第6行,code是一个字符串,该字符串的内容是一个函数体。
第8行,将code字符串编译成函数 hello
第10行,将函数 hello 添加到namespace字典中(key为hello),同时也将python的所有内置函数添加到namespace字段中(key为__builtins__),如此一来,namespace中的内容好比是一个个的全局变量,即
第12行,执行Hello函数并将返回值复制给result
第14行,输入result
这段代码用的很是巧妙有木有,亮瞎狗眼有木有,居然把字符串变成了函数并且还为该函数提供了全局变量。对于该功能,它就是python的web框架中模板语言部分至关重要的部分,因为在模板处理过程中,首先会读取html文件,然后分割html文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。
...
...
...
好了,醒醒吧,回归现实看代码了!!
执行字符串表示的函数,并为该函数提供全局变量
本篇的内容从题目中就可以看出来,就是为之后剖析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文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。
相关文章推荐
- 第一个JavaScript代码:JS
- CF 9A Die Roll
- CSS3 选择器——伪类选择器
- Rabbit简单例子Demo
- javascript jquery插入元素后事件会被注销
- Windows Phone 十二、设计器同步
- css选择器-属性选择器
- java&eclipse代码提示
- html + css (1)
- 重装电脑系统Win7并激活、删除其中一个系统、修复电脑 发出尖锐的 嘀嘀嘀嘀嘀 警报生声
- flask twisted 结合方案
- 程序员的量化交易之路(39)--Lean之BacktestingRealTimeHandler回测实时时间事件处理7
- Ubuntu 1204 安装中文输入法
- 2015062105 - 如何快速学会知识
- 软件工程作业----个人读后感
- 团队作业-第5周-运行及总结
- 第一个HTML5代码:HTML、HTML、CSS
- 图书管理系统——运行及总结
- Android AdapterView
- 2015-第15周项目2-用二进制文件处理学生成绩