白话 Tornado 源码(4):褪去模板外衣的前戏,tornado前戏,废话不多说,直接上代码:
白话 Tornado 源码(4):褪去模板外衣的前戏,tornado前戏,废话不多说,直接上代码:
执行字符串表示的函数,并为该函数提供全局变量
本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:
Python#!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中的内容好比是一个个的全局变量,即
Pythonname = 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 源码(5):褪去模板的外衣,tornado褪去,在上
- Let’s Encrypt + Nginx + Tornado 开启 HTTPS,encryptnginx,未经作
- Tornado 源码分析,tornado源码分析,Tornado 的 IO
- 在Tornado服务器中安全处理Twilio请求,tornadotwilio,Twilio是
- 用Tornado连接新浪微博,Tornado连接新浪,前几天心血来潮
- tornado 框架入门代码,tornado框架入门,[Python]代码im
- Tornado 实现实时消息聊天,tornado实时,关键代码之 Mess
- tornado 集成 Django,tornado集成django,[Python]代码#*
- tornado 用上装饰器路由,tornado路由,base.py 这个是改
- 浅谈Python peewee 使用经验,pythonpeewee
评论关闭