天天看點

第四篇:白話tornado源碼之褪去模闆外衣的前戲

加班程式員最辛苦,來張圖醒醒腦吧!

第四篇:白話tornado源碼之褪去模闆外衣的前戲
第四篇:白話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檔案,再然後講分割的檔案組成一個字元串表示的函數,再再然後就是利用上述方法執行字元串表示的函數。

第四篇:白話tornado源碼之褪去模闆外衣的前戲

作者:武沛齊

出處:http://www.cnblogs.com/wupeiqi/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。