通過exec可以執(zhí)行動態(tài)Python代碼,類似Javascript的eval功能;而Python中的eval函數(shù)可以計算Python表達式,并返回結(jié)果(exec不返回結(jié)果,print(eval("…"))打印None);
代碼如下:
>>> exec("print(/"hello, world/")")
hello, world
>>> a = 1
>>> exec("a = 2")
>>> a
2
這里有個scope(命名空間,作用域)的概念,為了不破壞現(xiàn)在的scope,可以新建一個scope(一個字典)執(zhí)行exec(Javascript沒有此功能):
代碼如下:
>>> scope = {}
>>> exec("a = 4", scope)
>>> a
2
>>> scope['a']
4
>>> scope.keys()
dict_keys(['a', '__builtins__'])
__builtins__包含了所有的內(nèi)建函數(shù)和值;
而普通的{}不會包含__builtins__
代碼如下:
>>> a = {}
>>> a.keys()
dict_keys([])
同exec一樣,eval也可以使用命名空間:
代碼如下:
>>> result = eval('2+3')
>>> result
5
>>> scope={}
>>> scope['a'] = 3
>>> scope['b'] = 4
>>> result = eval('a+b',scope)
>>> result
7
新聞熱點
疑難解答
圖片精選