內置函數——eval、exec、compile

eval() 將字符串類型的代碼執行並返回結果python

print(eval('1+2+3+4'))

exec()將自字符串類型的代碼執行shell

print(exec("1+2+3+4"))
exec("print('hello,world')")
code = '''
import os 
print(os.path.abspath('.'))
'''
code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)
指定global參數

 

compile  將字符串類型的代碼編譯。代碼對象可以經過exec語句來執行或者eval()進行求值。

參數說明:   ide

1. 參數source:字符串或者AST(Abstract Syntax Trees)對象。即須要動態執行的代碼段。  post

2. 參數 filename:代碼文件名稱,若是不是從文件讀取代碼則傳遞一些可辨認的值。當傳入了source參數時,filename參數傳入空字符便可。  this

3. 參數model:指定編譯代碼的種類,能夠指定爲 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定爲‘exec’;當source中只包含一個簡單的求值表達式,model應指定爲‘eval’;當source中包含了交互式命令語句,model應指定爲'single'。spa

 

複製代碼
>>> #流程語句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
1
3
5
7
9


>>> #簡單求值表達式用eval
>>> code2 = '1 + 2 + 3 + 4'
>>> compile2 = compile(code2,'','eval')
>>> eval(compile2)


>>> #交互語句用single
>>> code3 = 'name = input("please input your name:")'
>>> compile3 = compile(code3,'','single')
>>> name #執行前name變量不存在
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    name
NameError: name 'name' is not defined
>>> exec(compile3) #執行時顯示交互命令,提示輸入
please input your name:'pythoner'
>>> name #執行後name變量有值
"'pythoner'"
複製代碼
相關文章
相關標籤/搜索