python內置函數-compile()


python的內置函數 compile()--編譯.

  這個函數有什么用呢? 一個最簡單的例子, 就是我們的代碼, 會被解釋器讀取,解釋器讀取后的其實是字符串, 然后通過compile編譯后, 又轉換成python可識別的代碼.這樣python就能執行了. 

  這里就有一個例子, 是將一段str字符串, 通過compile編譯為python代碼. 具體如下: 

  參考自http://www.cnblogs.com/wupeiqi/p/4592637.html

 

執行字符串表示的函數,並為該函數提供全局變量

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!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中的內容好比是一個個的全局變量,即
    1
    2
    3
    4
    5
    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文件,再然后講分割的文件組成一個字符串表示的函數,再再然后就是利用上述方法執行字符串表示的函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM