Python框架之Tornado(四)源码之褪去模板外衣的前戏
2016-04-21 21:20
507 查看
执行字符串表示的函数,并为该函数提供全局变量
本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:#!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 18
上述代码解析:
第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文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。
相关文章推荐
- Python语言快速入门
- Python框架之Tornado(二)请求阶段
- 菜鸟入门_Python_机器学习(3)_回归
- 安装Python及后续
- Python框架之Tornado(一)
- Python框架之Tornado(一)
- Python之Web框架
- Python 装饰器(进阶篇)
- Python 装饰器(进阶篇)
- python的一些细节(1)
- differences in python 2 and python 3
- 初识Python
- python 列表
- Python3.x与2.x的区别(记录下,以备自己忘了)
- python基础之01数据类型-变量-运算浅解
- python调用cmd命令的几种方式和区别
- Python学习记录
- python 处理中文字符串的相关问题
- python自动化测试(4)-使用第三方python库技术实现
- Python nltk Brown最有新闻价值并且是最浪漫的日子