Python提供的調用可執行對象的內建函數進行說明,涉及exec、eval、compile三個函數。exec語句用來執行存儲在代碼對象、字符串、文件中的Python語句,eval語句用來計算存儲在代碼對象或字符串中的有效的Python表達式,而compile語句則提供了字節編碼的預編譯。python
固然,須要注意的是,使用exec和eval必定要注意安全性問題,尤爲是網絡環境中,可能給予他人執行非法語句的機會。正則表達式
格式:exec obj安全
obj對象能夠是字符串(如單一語句、語句塊),文件對象,也能夠是已經由compile預編譯過的代碼對象。網絡
下面是相應的例子:函數
Python可執行對象之exec使用舉例編碼
# 單行語句字符串 >>> exec "print 'pythoner.com'" pythoner.com # 多行語句字符串 >>> exec """for i in range(5): ... print "iter time: %d" % i ... """ iter time: 0 iter time: 1 iter time: 2 iter time: 3 iter time: 4
代碼對象的例子放在第3部分一塊兒講解。code
格式:eval( obj[, globals=globals(), locals=locals()] )對象
obj能夠是字符串對象或者已經由compile編譯過的代碼對象。globals和locals是可選的,分別表明了全局和局部名稱空間中的對象,其中globals必須是字典,而locals是任意的映射對象。字符串
下面仍然舉例說明:it
Python可執行對象之eval
>>> x = 7 >>> eval( '3 * x' ) 21
格式:compile( str, file, type )
compile語句是從type類型(包括’eval': 配合eval使用,’single': 配合單一語句的exec使用,’exec': 配合多語句的exec使用)中將str裏面的語句建立成代碼對象。file是代碼存放的地方,一般爲」。
compile語句的目的是提供一次性的字節碼編譯,就不用在之後的每次調用中從新進行編譯了。
還須要注意的是,這裏的compile和正則表達式中使用的compile並不相同,儘管用途同樣。
下面是相應的舉例說明:
Python可執行對象之compile
>>> eval_code = compile( '1+2', '', 'eval') >>> eval_code <code object <module> at 0142ABF0, file "", line 1> >>> eval(eval_code) 3 >>> single_code = compile( 'print "pythoner.com"', '', 'single' ) >>> single_code <code object <module> at 01C68848, file "", line 1> >>> exec(single_code) pythoner.com >>> exec_code = compile( """for i in range(5): ... print "iter time: %d" % i""", '', 'exec' ) >>> exec_code <code object <module> at 01C68968, file "", line 1> >>> exec(exec_code) iter time: 0 iter time: 1 iter time: 2 iter time: 3 iter time: 4