zoukankan      html  css  js  c++  java
  • 第四篇:白话tornado源码之褪去模板外衣的前戏

     

    加班程序员最辛苦,来张图醒醒脑吧!

    ...

    ...

    ...

    好了,醒醒吧,回归现实看代码了!!

    执行字符串表示的函数,并为该函数提供全局变量

    本篇的内容从题目中就可以看出来,就是为之后剖析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文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。

     
     
     
  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/bingabcd/p/7508086.html
Copyright © 2011-2022 走看看