python eval有什么用,python编程eval什么意思

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: