python中eval和exec用法比较

区别:
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/
 
 
 
#字符串转换成list
>>> 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
原文地址:https://www.cnblogs.com/wenm1128/p/11780965.html