eval(expression, globals=None, locals=None)
动态执行一个表达式的字符串,或者 compile()
函数编译出来的代码对象
说明
参数 expression:必选,表达式字符串,或者 compile()
函数编译出来的代码对象;
参数 globals:可选(字典类型),全局命名空间,可以指定执行表达式时的全局作用域的范围,比如指定某些模块可以使用。如果本参数缺省,就使用当前调用这个函数的当前全局命名空间;
参数 locals:可选( mapping对象类型),局部作用域命名空间,是用来指定执行表达式时访问的局部命名空间。如果全局命名空间参数出现,但缺省内置模块,那么会自动拷贝这个模块到全局命名空间,意味着无论怎么设置,都可以使用内置模块。
如果参数 globals 和参数 locals 都使用缺省方式,就会使用调用这个函数时的命名空间来查找相应的变量。
示例
>>> 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
>>>