eval(expression, globals=None, locals=None)
動(dòng)態(tài)執(zhí)行一個(gè)表達(dá)式的字符串,或者 compile()
函數(shù)編譯出來(lái)的代碼對(duì)象
說(shuō)明
參數(shù) expression:必選,表達(dá)式字符串,或者 compile()
函數(shù)編譯出來(lái)的代碼對(duì)象;
參數(shù) globals:可選(字典類(lèi)型),全局命名空間,可以指定執(zhí)行表達(dá)式時(shí)的全局作用域的范圍,比如指定某些模塊可以使用。如果本參數(shù)缺省,就使用當(dāng)前調(diào)用這個(gè)函數(shù)的當(dāng)前全局命名空間;
參數(shù) locals:可選( mapping對(duì)象類(lèi)型),局部作用域命名空間,是用來(lái)指定執(zhí)行表達(dá)式時(shí)訪問(wèn)的局部命名空間。如果全局命名空間參數(shù)出現(xiàn),但缺省內(nèi)置模塊,那么會(huì)自動(dòng)拷貝這個(gè)模塊到全局命名空間,意味著無(wú)論怎么設(shè)置,都可以使用內(nèi)置模塊。
如果參數(shù) globals 和參數(shù) locals 都使用缺省方式,就會(huì)使用調(diào)用這個(gè)函數(shù)時(shí)的命名空間來(lái)查找相應(yīng)的變量。
示例
>>> x = 1
>>> eval('x+1')
2
>>>
>>>
>>> import math
>>> ALLOWED = {v: getattr(math, v)
... for v in filter(lambda x: not x.startswith('_'), dir(math))
... }
>>> print(eval('cos(90)', ALLOWED, {}))
-0.4480736161291701
>>>