1. 程式人生 > >內置函數—eval、exec、compile

內置函數—eval、exec、compile

abstract 交互式 簡單的 64 bit tdi int abs lin 字符

  內置函數————eval、exec、compile


eval()將字符串類型的代碼執行並返回結果。
print(eval(‘1+2+3+4‘))
輸出:
10

exec() 將字符串類型的代碼執行。
print(exec("1+2+3+4"))
exec("print(‘hello,world‘)")
指定global參數
code = ‘‘‘
import os
print(os.path.abspath(‘.‘))
‘‘‘
code = ‘‘‘
print(123)
a = 20
print(a)
‘‘‘
a = 10
exec(code,{‘print‘:print},)
print(a)

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

參數說明
1.參數source:字符串或者AST(Abstract Syntax Trees)對象。即需要動態執行的代碼段。
2.參數filename:代碼文件名稱,如果不是從文件讀取代碼則傳遞一些可辨認的值。當傳入了source參數時,filename參數傳入空字符即可。
3.參數model:指定編譯代碼的種類,可以指定為exec,eval,single。當source中包含流程語句時,model應指定為,exec:當source中只包含一個簡單的求值表達式,model應指定為eval:當source中包含了交互式命令語句,model應指定為single。

# 流程語句使用

code1 = ‘for i in range(1,10):print(i)‘


compile1 = compile(code1,‘‘,‘exec‘)
exec(compile1)
輸出:
1
2
3
4
5
6
7
8
9

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


C:\Users\zl-pc>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
on win32
Type "help", "copyright", "credits" or "license" for more information.


>>> code3 = ‘name = input("please input your name:")‘
>>> compile3 = compile(code3,‘‘,‘single‘)
>>> name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ‘name‘ is not defined
>>> exec(compile3)
please input your name:python
>>> name
‘python‘
>>>

內置函數—eval、exec、compile