Python可執行對象——exec、eval、compile

Python提供的調用可執行對象的內建函數進行說明,涉及exec、eval、compile三個函數。exec語句用來執行存儲在代碼對象、字符串、文件中的Python語句,eval語句用來計算存儲在代碼對象或字符串中的有效的Python表達式,而compile語句則提供了字節編碼的預編譯。python

固然,須要注意的是,使用exec和eval必定要注意安全性問題,尤爲是網絡環境中,可能給予他人執行非法語句的機會。正則表達式

1.exec

格式: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

2.eval

格式:eval( obj[, globals=globals(), locals=locals()] )對象

obj能夠是字符串對象或者已經由compile編譯過的代碼對象。globals和locals是可選的,分別表明了全局和局部名稱空間中的對象,其中globals必須是字典,而locals是任意的映射對象。字符串

下面仍然舉例說明:it

Python可執行對象之eval

>>> 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

>>> 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
相關文章
相關標籤/搜索