exec()和eval()
Posted 月疯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了exec()和eval()相关的知识,希望对你有一定的参考价值。
exec()和eval()的区别
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
以上是关于exec()和eval()的主要内容,如果未能解决你的问题,请参考以下文章