python内置函数(三)eval、exec

python中这两个内置的函数eval和exec都可以执行str形式的python表达式,比如说”print(a + b)” 。有时候可以派上用场。

eval函数形式

eval(source, globals=None, locals=None)

其中gobals和locals分别表示全局命名空间和局部命名空间,必须是dict形式。如果不提供则使用当前调用环境下的全局命名空间和局部命名空间。eval的返回值就是其中表达式的返回值。注意eval中的表达式不能是赋值表达式!!!

a = 10
def foo():
    b = 12
    c = eval("a+b")
    print("c:",c)
    d = eval("a+b",{"a":1,"b":2})
    print("d:",d)
    e = eval("a+b",{"a":1,"b":2},{"b":3})
    print("e:",e)
    f = eval("print(a+b)")
    print("f:",f)

foo()

结果为

c: 22
d: 3
e: 4
22
f: None

exec函数形式

exec(source, globals=None, locals=None)

形式上同eval函数一样。exec函数中可以是赋值表达式。但exec与eval最主要的区别是它可以运行代码段,而eval中只能是单个表达式。 另外exec函数返回值永远是None!

snippet = 
"""
a = 1
b = 2
c = a+b
print(c)
print("this is a code snippet")
""" 

a = 10
def foo():
    b = 12
    c = exec("a+b")
    print("c:",c)
    d = exec("d=a+b\nprint('d:',d)")
    exec(snippet)

foo()

结果为

c: None
d: 22
3
this is a code snippet