白話 Tornado 原始碼(4):褪去模板外衣的前戲

發表於2015-09-17

執行字串表示的函式,併為該函式提供全域性變數

本篇的內容從題目中就可以看出來,就是為之後剖析tornado模板做準備,也是由於該知識點使用的巧妙,所有就單獨用一篇來介紹了。廢話不多說,直接上程式碼:

此段程式碼的執行結果是:name wupeiqi,age 18

上述程式碼解析:

  • 第6行,code是一個字串,該字串的內容是一個函式體。
  • 第8行,將code字串編譯成函式 hello
  • 第10行,將函式 hello 新增到namespace字典中(key為hello),同時也將python的所有內建函式新增到namespace欄位中(key為builtins),如此一來,namespace中的內容好比是一個個的全域性變數,即
  • 第12行,執行Hello函式並將返回值複製給result
  • 第14行,輸入result

這段程式碼用的很是巧妙有木有,亮瞎狗眼有木有,居然把字串變成了函式並且還為該函式提供了全域性變數。對於該功能,它就是python的web框架中模板語言部分至關重要的部分,因為在模板處理過程中,首先會讀取html檔案,然後分割html檔案,再然後講分割的檔案組成一個字串表示的函式,再再然後就是利用上述方法執行字串表示的函式。

相關文章