eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。
们的区别在于,eval() 执行完会返回结果,而 exec() 执行完不返回结果。
举例:
语法
以下是 eval() 方法的语法:
eval(expression, globals=None, locals=None)
参数
- expression -- 表达式。
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。
python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。
返回值
返回表达式计算结果。
- x=9
- w=eval('x+2')
- print(w)
-
- #gloas()用法
-
- a=1
- b=1
- print(eval("a+b"))
- def func():
- a=2
- b=2
- #不加gloas()会在局部查找a和b的范围
- print(eval("a+b")) #输出4
- #加了gloas()会在全局搜索a和b的范围
- print(eval("a+b",globals())) #输出2
- #局部查找
- print(eval("a+b",globals(),locals())) #2
-
- func()
输出:
- 11
- 2
- 4
- 2
- 4
-
- Process finished with exit code 0
把字符串编程list、dict、tuple
- n='[[1,2],[3,4]]'
- print(eval(n))
- m='(1,2,3)'
- print(eval(m))
- c="{'a':1}"
- print(eval(c))
- [[1, 2], [3, 4]]
- (1, 2, 3)
- {'a': 1}
exec()语法:
相比于 eval,exec可以执行更复杂的 Python 代码。eval执行单挑python语句,exec执行多条,或者更加复杂代码。
需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
参数
- obj -- 要执行的表达式。
返回值
exec 返回值永远为 None。
- exec ("print ('hello world cup')")
-
- 输出:
- hello world cup
-
-
-
- expr = """
- z = 30
- sum = x + y + z
- print(sum)
- """
-
- def funcs():
- y = 20
- exec(expr)
- exec(expr,{"x":1,"y":2})
- exec(expr,{"x":1,"y":10},{"x":20,"y":30})
-
-
- funcs()
- 59
- 33
- 80