区别:
1、exec与eval语句的主要区别是,exec把字符串转化成一个python代码执行,而eval从一个表达式里返回值。
2、exec没有返回值,eval有返回值
代码示例:
>>> eval("2+3")5
>>> exec("a=2+3")>>>a5
>>> 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/
#字符串转换成list
>>> a='[[1,2],[3,4]]'
>>> print(type(a))
>>> b=eval(a)>>>b
[[1, 2], [3, 4]]>>>type(b)
#字符串转换成元祖
>>> t='(1,2,3)'
>>>type(t)
>>> n=eval(t)>>>n
(1, 2, 3)>>>type(n)
#字符串转换成字典
>>> s="{'a':1}"
>>>type(s)
>>> s1=eval(s)>>>s1
{'a': 1}>>>type(s1)
>>> eval('{2:1}')
{2: 1}
#加globals的用法
>>> a=1
>>> g={'a':20}>>> eval("a+1",g)21
>>> x=1
>>> y=1
>>> num1 = eval('x+y')>>>num12
>>>
>>>
>>> deffunc():
... 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:1iter time:2iter time:3iter time:4
实例 2
>>> x = 10
>>> expr = """... z = 30
... sum = x + y + z
... print(sum)
..."""
>>> deffunc():
... y= 20...exec(expr)
...exec(expr, {'x': 1, 'y': 2})
...exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
...>>>func()60
33
34