python eval有什么用,python编程eval什么意思
最近在开发中使用了两个函数,eval()和exec()。不知道哪个场景用哪个函数,所以翻了翻Python的文档。下面简单说说这两个功能的区别。
1. eval函数
函数的作用:
计算表达式的值。也就是说,它要执行的Python代码只能是单一的运算表达式(注意eval不支持任何形式的赋值运算),而不是复杂的代码逻辑,类似于lambda表达式。
函数定义:
eval(expression,globals=None,locals=None)参数说明:
Expression:必选参数,可以是字符串,也可以是任意代码对象实例(可以由compile函数创建)。如果是字符串,它将被分析和解释为Python表达式(使用全局和局部名称空间)。
Globals:可选参数,表示全局名称空间(存储全局变量)。如果提供,它必须是一个字典对象。
Locale:可选参数,表示当前的本地名称空间(存储本地变量)。如果提供,它可以是任何映射对象。如果忽略此参数,它将采用与globals相同的值。
如果全局和本地都被忽略,它们将采用调用eval()函数的环境的全局名称空间和本地名称空间。
返回值:
如果expression是一个code对象,并且在创建code对象时,compile函数的mode参数为‘exec’,那么eval()函数的返回值为None;
否则,如果expression是输出语句,比如print(),eval()返回的结果是None;
否则,表达式expression的结果就是eval()函数的返回值;
示例:
x=10
deffunc():
y=20
a=eval(x y )
打印( a: ,a)
b=eval(x y ,{x:1, y:2})
打印( b: ,b)
c=eval(x y ,{x:1, y:2},{y:3, z:4})
打印( c: ,c)
d=eval(print(x,y))
打印( d: ,d)
函数()输出结果
a:30
b:3
c:4
1020
d:None输出结果说明:
对于变量A,忽略eval函数的globals和locals参数,所以变量X和Y是调用eval函数的环境范围内的变量值,即:x=10,y=20,a=x y=30。
对于变量B,eval函数只提供了globals参数而忽略了locals参数,所以locals会取globals参数的值,即:x=1,y=2,b=x y=3。
对于变量C,提供了eval函数的globals参数和locales,那么eval函数将首先从所有作用域globals中找到变量X,从局部作用域locales中找到变量Y,即:x=1,y=3,c=x y=4。
对于变量D,返回值为None,因为print()函数不是计算表达式,没有计算结果。
2. exec函数
函数的作用:
动态执行Python代码。也就是说exec可以执行复杂的Python代码,而不像eval函数那么样只能计算一个表达式的值。
函数定义:
exec(object[,globals[,locals]])
参数说明:
object:必选参数,表示需要被指定的Python代码。它必须是字符串或code对象。如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误)。如果object是一个code对象,那么它只是被简单的执行。
globals:可选参数,同eval函数
locals:可选参数,同eval函数
返回值:
exec函数的返回值永远为None.
需要说明的是在Python 2中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个execfile()函数。可以理解为Python 3把exec这个statement和execfile()函数的功能够整合到一个新的exec()函数中去了。
eval()函数与exec()函数的区别
eval()函数只能计算单个表达式的值,而exec()函数可以动态运行代码段。
eval()函数可以有返回值,而exec()函数返回值永远为None。
实例1:
我们把实例1中的eval函数换成exec函数试试:
x=10
输出结果
a:None
因为我们说过了,exec函数的返回值永远为None。
实例2
x=10
输出结果
123
对输出结果的解释:
前两个输出跟上面解释的eval函数执行过程一样,不做过多解释。关于最后一个数字34,我们可以看出是:x = 1, y = 3是没有疑问的。关于z为什么还是30而不是4,这其实也很简单,我们只需要在理一下代码执行过程就可以了,其执行过程相当于:
x=1
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。