首页 > 编程语言 >第四篇:白话tornado源码之褪去模板外衣的前戏

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

时间:2023-04-29 16:00:09浏览次数:46  
标签:code name tornado 前戏 namespace 源码 字符串 模板 函数

  原笔记博客链接: https://www.cnblogs.com/wupeiqi/p/4592637.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文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。

 

标签:code,name,tornado,前戏,namespace,源码,字符串,模板,函数
From: https://www.cnblogs.com/lizexiong/p/17364093.html

相关文章

  • vue2源码-十七、Vue组件间传值的方式及之间区别
    Vue组件间传值的方式及之间区别通过props传递:父组件传递数据给子组件使用//chilid,vueprops:{//字符串形式name:String//接收的类型参数//对象形式age:{type:Number,//接收的类型为数值defaule:18,//默认值为18r......
  • 深入探讨源码--ArrayList
    持续推送技术干货目录深入探讨源码之ArrayListArrayList类图ArrayList的数据结构ArrayList的关键属性ArrayList构造方法ArrayList常用方法add方法ArrayList中的fast-fail机制add(i,o)方法set(i,o)方法get(i)方法remove(index)方法remove(Object)方法clear方法indexOf(o)方法深......
  • Java重写源码中的方法
    重写步骤:1.找到你所要重写的方法的所在类,查看其中的路径;2.在我们的src目录下新建一个同包名同类名的类;3.将jar包中的重写方法所在类的所有代码复制到我们新建的同包名同类名的类中;4.在我们新建的同包名同类名的类中修改对应的方法中的代码,注意要保持方法中的参数不要发生改变,也......
  • Spring源码分析之BeanFactory
    概述以XmlBeanFactory为例分析Xml描述的Bean被Reasource加载到内存,先解析为Document对象,再解析为BeanDefinition注册到BeanDefinitionRegistry,再通过BeanFactory创建名词解释Resource是Spring对资源的抽象,主要是用来读取文件输入流Document是java本身的API进行解析的,得到......
  • Unity+SenseAR教程:用手势发射爱心【源码】
    摘要:Unity+SenseAR2.3开发的AR应用,基于手势识别功能,发射你的爱心~洪流学堂,让你快人几步。你好,我是你的技术探路者郑洪智,你可以叫我大智。今天开头就不絮叨了,一句“名言”送给大家,然后咱们把代码微微的一写。“虽然今天是情人节,但怎会比学习带来更多的多巴胺呢?”——澹深苟最终效果......
  • 在线直播系统源码,实现在图片上涂鸦并记录涂鸦轨迹
    在线直播系统源码,实现在图片上涂鸦并记录涂鸦轨迹1.activity_main.xml界面 <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-au......
  • Spring理解及源码框架
    1、容器与Bean容器理解从这张图能看到重要容器有BeanFactoryConfigurableApplicationContext它们的关系是ConfigurableApplicationContext间接继承了ApplicationContext然后间接继承了BeanFactoryBeanFactory从侧面看到Spring有在用工厂模式。除此之外spring还用了单例模式、......
  • 详解八大排序(附动图和源码)
    目录......
  • 【Visual Leak Detector】核心源码剖析(VLD 1.0)
    说明使用VLD内存泄漏检测工具辅助开发时整理的学习笔记。本篇对VLD1.0源码做内存泄漏检测的思路进行剖析。同系列文章目录可见《内存泄漏检测工具》目录目录说明1.源码获取2.源码文件概览3.源码剖析3.1注册自定义AllocHook函数3.2存储调用堆栈信息3.3生成泄漏检测......
  • Semaphore源码分析
    1、Semaphore介绍计数信号量-Semaphore,常用来限制访问资源的线程数量。优点类似限流中的令牌桶算法,只有拿到信号量的线程才能执行,与令牌桶算法未拿到令牌不处理请求不同的是,在Semaphore中未拿到信号量的线程会阻塞等待,直到有某个线程释放了持有的信号量。2、Semaphore使用......