一、 eval 將字符串轉(zhuǎn)換成有效的Python表達(dá)式
eval (expression[, globals [, locals ]])
(一)expression的一個(gè)表達(dá)式,可以是:‘ 1 + 1 ’,‘wang’(需定義),‘x + 1 ’(x需定義)
例 1 :
print eval ( '2+2' )、
例 2 :
w = "zhejiang"
print eval ( 'w' )
例 3 :
x = 1
y = 2
print eval ( 'x+1,y**3' )
(二) globals 是一個(gè)字典: globals = { 'x' : 3 , 'y' : 3 }
globals = { 'x' : 3 , 'y' : 3 }
print eval ( 'x+1,y**3' , globals )
(三) locals 是一個(gè)映射:所謂映射,就是引用的對(duì)象有具體值,取所引用對(duì)象的值。
x = 1
y = 2
print eval ( 'x+1,y**3' , locals ())
二、 exec ,將一個(gè)字符串編譯成字符形式,并執(zhí)行該表達(dá)式
例 1 :
exec ( 'print "i am good"' )
例 2 :
globals = { 'x' : 3 , 'y' : 3 }
exec ( 'print x+2+y*3' ) in globals
三、 execfile ,執(zhí)行一個(gè)文件
execfile (filename[, globals [, locals ]])
(一) execfile (r 'C:\Documents and Settings\Administrator\b.py' )
文件b.py中的內(nèi)容: print eval ( '2+1' ),運(yùn)行結(jié)果是: 3
(window下用原始字符串,所以加r)
(二)
globals = { 'x' : 3 , 'y' : 3 }
execfile (r 'C:\Documents and Settings\Administrator\b.py' , globals )
文件b.py中的內(nèi)容: print eval ( 'x+y' ),運(yùn)行結(jié)果是: 6
(三)
x = 1
y = 2
execfile (r 'C:\Documents and Settings\Administrator\b.py' , locals ())
文件b.py中的內(nèi)容: print eval ( 'x+y' ),運(yùn)行結(jié)果是: 3
四、 compile 編譯字符串或一個(gè)文件
compile (source,filename,mode)
source就是一個(gè)字符串
filename就是一個(gè)文件(地址)
mode分 eval 和 exec 兩個(gè)
例 1 : print compile ( 'print "i am good"' ,' ',' exec ')
運(yùn)行結(jié)果:<code object <module> at 00ABCD10 , file "", line 1 >
例 2 : eval ( compile ( 'print "i am good"' ,' ',' exec '))
運(yùn)行結(jié)果:i am good
例 3 : exec ( compile ( 'print "i am good"' ,' ',' exec '))
運(yùn)行結(jié)果:i am good
例 4 :w = "zhejiang"
print eval ( compile ( 'w' ,' ',' eval '))
運(yùn)行結(jié)果:zhejiang
|