学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫eval。eval函数可计算某个字符串,并执行其中的的JavaScript代码。正是因为这个特性,所以现在很多教材都不推荐使用这个函数。
学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫eval。eval函数可计算某个字符串,并执行其中的的JavaScript代码。正是因为这个特性,所以现在很多教材都不推荐使用这个函数。
无独有偶,在Python中也有eval函数,同样是内置函数。其功能和JS中的类似。不同的是,Python中的eval可以接受三个参数,具体如下:
eval(expression[, globals[, locals]])
参数说明:
expression:必选参数,可以是字符串,也可以是一个任意的code对象实例。如果是字符串,它会被当作一个Python表达式进行分析和解释。
globals:可选参数,类型必须是dictionary,表示全局命名空间(存放全局变量)。
locals:可选参数,可以是任意map对象,表示当前局部命名空间(存放局部变量)。如果该参数被忽略,那么它将会取与globals相同的值。
注:如果globals与locals都没填,那么它们将取eval函数被调用环境下的全局命名空间和局部命名空间。对于不同的code代码,eval函数的返回值可能是不同的。
Python中还有一个类似eval的函数——exec函数,同样是内置函数,不过JS中并没有一个全局的exec函数。
exec(object[, globals[, locals]])
参数说明:
object:必选参数,必须是字符串或code对象。如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误)。如果object是一个code对象,那么它只是被简单的执行。
globals:可选参数,类型必须是dictionary,表示全局命名空间(存放全局变量)。
locals:可选参数,可以是任意map对象,表示当前局部命名空间(存放局部变量)。如果该参数被忽略,那么它将会取与globals相同的值。
注:exec函数的返回值永远为None。
eval和exec的区别:
1、eval函数只能用于计算单个表达式的值,而exec函数可以执行代码段;
2、eval函数可以有返回值,并且根据传入内容的不同返回值可能不同,而exec函数返回值永远为None。
由于eval函数和exec函数可以执行代码,存在一定的安全隐患。如无必要,不建议使用。