Tornado源码之褪去模板(04)
来源:互联网 发布:知乎 多功能料理机 编辑:程序博客网 时间:2024/06/05 18:41
第四篇:白话tornado源码之褪去模板外衣的前戏
加班程序员最辛苦,来张图醒醒脑吧!
...
...
...
好了,醒醒吧,回归现实看代码了!!
执行字符串表示的函数,并为该函数提供全局变量
本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!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中的内容好比是一个个的全局变量,即12345
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文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。
作者:武沛齐
出处:http://www.cnblogs.com/wupeiqi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
出处:http://www.cnblogs.com/wupeiqi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
阅读全文
0 0
- Tornado源码之褪去模板(04)
- Tornado源码之褪去模板(05)
- tornado模板源码小析
- Tornado源码之请求(03)
- Tornado源码分析之IOLoop
- 程序之路,褪去浮躁
- Tornado源码之待请求阶段(02)
- tornado模板
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- tornado之ioloop类源码分析
- Tornado源码分析之http服务器篇
- Tornado源码分析之http服务器篇
- (2)2017.8.3下,java小程序的实践
- JavaScript概览
- C/C++常见笔试面试题(二)——软件特性、fseek()函数、逗号运算符、左值和右值
- 【Selenium】15执行JS,判断元素点击,添加删除元素
- 剑指offer:多行打印二叉树
- Tornado源码之褪去模板(04)
- OpenCV学习之角点检测
- 小希的迷宫
- 使用Unity画一条平滑曲线(贝塞尔曲线)并使小球沿曲线运动
- LeetCode
- Locust性能测试框架介绍与安装
- Tip16 元素数量可变的情况下不应使用数组
- 执行shell命令工具类
- python3,使用sys.setdefaultencoding('utf-8'),编译时报错