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()的主要内容,如果未能解决你的问题,请参考以下文章

Python eval()和exec()函数

Python之eval和exec

eval和exec函数的区别

python中的exec和eval

eval()与exec() 的基本用法

eval()与exec() 的基本用法