python eval exec_python中eval和exec用法比较

区别:

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

你可能感兴趣的:(python,eval,exec)