python中的eval 和 exec 和 execfile
#eval 函数用来计算python表达式并返回结果
#exec 可以执行动态的python代码,不返回结果
def hello(): print("hello world")
eval("hello()") 输出 hello world
exec("hello()") 输出 hello world
##
或者这样执行也可以
eval("hello")()
区别上:
1 eval 可以返回结果
def hello():
print("hello world")
return "test"
val = eval("hello()") print(val) #输出 hello world test
exec 没有返回值
def hello(): print("hello world") return "test" val = exec("hello()") print(val)
#输出
File "Z:/myproject/myproject/test.py", line 9
val = exec("hello()")
^
SyntaxError: invalid syntax
2 相比eval , exec可以执行更复杂的 Python 代码
testtext = ''' for i in range(3): print("the num is %d" % i) ''' exec(testtext)
#输出
the num is 0
the num is 1
the num is 2
上面的语句 eval 执行不了。eval 只能执行 字符串表达式
def hello(): for i in range(4): print("the num is %d" % i) eval("hello()") #会正常输出
execfile
execfile() 函数可以用来执行一个文件
需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
[root@localhost weblearn]# python t.py asdasdf [root@localhost weblearn]# cat 1.py execfile("t.py") [root@localhost weblearn]# cat t.py def hello(): print("asdasdf") hello() [root@localhost weblearn]# python 1.py asdasdf