区别:
1、exec与eval语句的主要区别是,exec把字符串转化成一个python代码执行,而eval从一个表达式里返回值。
2、exec没有返回值,eval有返回值
代码示例:
>>> eval("2+3") 5 >>> exec("a=2+3") >>> a 5 >>> eval("2+3") 5 >>> exec("print(1)") 1
eval
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
即实现list,tuple,dict与str之间的转化。
语法
以下是 eval() 方法的语法:
eval(expression[, globals[, locals]])
eval(expression, globals=None, locals=None)
参数
- expression -- 表达式。
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。
python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。
返回值
返回表达式计算结果。
实例
#返回表达式的值
>>>x = 7 >>> eval( '3 * x' ) 21 >>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> n=81 >>> eval("n + 4") 85 >>> eval('n') #也可以把字符串对应的值取出来 81
>>> ip="39.106.41.11" >>> port="8080" >>> >>> register="http://"+ip+":"+port+"/register/" >>> print("register") register >>> print(eval("register")) http://39.106.41.11:8080/register/
>>> a='[[1,2],[3,4]]' >>> print(type(a)) <class 'str'> >>> b=eval(a) >>> b [[1, 2], [3, 4]] >>> type(b) <class 'list'>
#字符串转换成元祖
>>> t='(1,2,3)' >>> type(t) <class 'str'> >>> n=eval(t) >>> n (1, 2, 3) >>> type(n) <class 'tuple'>
#字符串转换成字典
>>> s="{'a':1}" >>> type(s) <class 'str'> >>> s1=eval(s) >>> s1 {'a': 1} >>> type(s1) <class 'dict'> >>> eval('{2:1}') {2: 1}
#加globals的用法
>>> a=1 >>> g={'a':20} >>> eval("a+1",g) 21
>>> x=1 >>> y=1 >>> num1 = eval('x+y') >>> num1 2 >>> >>> >>> def func(): ... x=2 ... y=2 ... num3 = eval('x+y') ... print(num3) ... num2 = eval('x+y',globals()) ... print(num2) ... num4 = eval('x+y',globals(),locals()) ... print(num4) ... >>> func() 4 2 4
num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4
exec
描述
exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
语法
以下是 exec 的语法:
exec obj
参数
- obj -- 要执行的表达式。
返回值
exec 返回值永远为 None。
实例
以下展示了使用 exec 的实例:
实例 1
#单行语句字符串
>>> exec ("print ('hello world')") hello world
#多行语句字符串
>>> exec ("""for i in range(5): ... print ("iter time:%d" %i) ... """) iter time:0 iter time:1 iter time:2 iter time:3 iter time:4
实例 2
>>> x = 10 >>> expr = """ ... z = 30 ... sum = x + y + z ... print(sum) ... """ >>> def func(): ... y = 20 ... exec(expr) ... exec(expr, {'x': 1, 'y': 2}) ... exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4}) ... >>> func() 60 33 34