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

 

posted on 2020-11-27 22:12  思此狂  阅读(300)  评论(0编辑  收藏  举报

导航