Python中eval与exec区别

摘要

学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫eval。eval函数可计算某个字符串,并执行其中的的JavaScript代码。正是因为这个特性,所以现在很多教材都不推荐使用这个函数。

学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫evaleval函数可计算某个字符串,并执行其中的的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函数可以执行代码,存在一定的安全隐患。如无必要,不建议使用。

shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: