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   思此狂  阅读(316)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示