Python可執行物件——exec、eval、compile
阿新 • • 發佈:2018-12-31
http://www.pythoner.com/56.html
這篇文章將對Python提供的呼叫可執行物件的內建函式進行說明,涉及exec、eval、compile三個函式。exec語句用來執行儲存在程式碼物件、字串、檔案中的Python語句,eval語句用來計算儲存在程式碼物件或字串中的有效的Python表示式,而compile語句則提供了位元組編碼的預編譯。
當然,需要注意的是,使用exec和eval一定要注意安全性問題,尤其是網路環境中,可能給予他人執行非法語句的機會。
1.exec
格式:exec obj
obj物件可以是字串(如單一語句、語句塊),檔案物件,也可以是已經由compile預編譯過的程式碼物件。
下面是相應的例子:
Python可執行物件之exec使用舉例 Python1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 單行語句字串 |
程式碼物件的例子放在第3部分一起講解。
2.eval
格式:eval( obj[, globals=globals(), locals=locals()] )
obj可以是字串物件或者已經由compile編譯過的程式碼物件。globals和locals是可選的,分別代表了全域性和區域性名稱空間中的物件,其中globals必須是字典,而locals是任意的對映物件。
下面仍然舉例說明:
Python可執行物件之eval Python1 2 3 | >>>x=7 >>>eval('3 * x') 21 |
3.compile
格式:compile( str, file, type )
compile語句是從type型別(包括’eval': 配合eval使用,’single': 配合單一語句的exec使用,’exec': 配合多語句的exec使用)中將str裡面的語句建立成程式碼物件。file是程式碼存放的地方,通常為”。
compile語句的目的是提供一次性的位元組碼編譯,就不用在以後的每次呼叫中重新進行編譯了。
還需要注意的是,這裡的compile和正則表示式中使用的compile並不相同,儘管用途一樣。
下面是相應的舉例說明:
Python可執行物件之compile Python1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >>>eval_code=compile('1+2','','eval') >>>eval_code <codeobject<module>at0142ABF0,file"",line1> >>>eval(eval_code) 3 >>>single_code=compile('print "pythoner.com"','','single') >>>single_code <codeobject<module>at01C68848,file"",line1> >>>exec(single_code) pythoner.com >>>exec_code=compile("""for i in range(5): ... print "iter time: %d" % i""",'','exec') >>>exec_code <codeobject<module>at01C68968,file"",line1> >>>exec(exec_code) itertime:0 itertime:1 itertime:2 itertime:3 itertime:4 |