9.5 python的解析函数eval与exec
eval是执行一个表达式,exec是执行一个或多个代码语句,单个代码语句是由一个表达式或多个表达式组成的。eval(expression,globals,locals)和exec(source,globals,locals),其中,参数expression是字符串格式的表达式,source是字符串格式的代码语句或代码对象(code object,代码语句的字节码形式)。两者中参数globals,locals表示的意思是一样的,当参数globals,locals缺省时,eval和exec是按程序默认的LEGB原则来引用名称的,当存在参数globals时,先匹配locals中的,未查找到的再匹配globals中的,当都未查找到时,只能引用内置空间命名空间Built-in中的名称。
eval可以用在把字符串格式转换为其它数据类型,比如:字符串格式的列表转换为列表,用eval可以实现一些计算,用exec可以加载且激活代码语句,使得代码语句可以被调用。eval可以有返回值,exec是没有返回值的,返回值为None。另外,exec对已经加载且激活的语句是直接执行,但不获取return的返回值。
由于