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
