ふじさん春原庄的雪

Python eval()和exec()函数

木子山13·2020-05-02 23:39·271 次阅读

Python eval()和exec()函数

相同点:eval()和exec()在一定命名空间范围内执行字符串形式的代码

不同点:exec()无返回值;eval()有返回值

格式:

eval(expression, globals=None, locals=None, /)
exec(expression, globals=None, locals=None, /)

参数含义:

expression:需要执行的字符串命令

globals:全局命名空间,即 expression 可以使用全局命名空间中的函数

local:局部命名空间(当局部命名空间与全局命名空间重复时,以局部命名空间为准)

 

globals用法:

dic={} #定义一个字典
dic['b'] = 3 #在 dic 中加一条元素,key 为 b
print (dic.keys()) #先将 dic 的 key 打印出来,有一个元素 b
exec("a = 4", dic) #在 exec 执行的语句后面跟一个作用域 dic
print(dic.keys()) #exec 后,dic 的 key 多了一个

运行结果:

dict_keys(['b'])
dict_keys(['b', '__builtins__', 'a'])

可以看到系统在 dic 中生成了两个新的 key,分别是 a 和 __builtins__。其中,a 为执行语句生成的变量,系统将其放到指定的命名空间;__builtins__ 是系统加入的内置 key。

 

local用法:

a=10
b=20
c=30
g={'a':6, 'b':8}
t={'b':100, 'c':10}
print(eval('a+b+c', g, t))

运行结果:

116

可以看出取到了a=6,b=100,c=6,因为在全局命名空间g与局部命名空间t中'b'重复,所以重复值取到局部空间t中的b=100

 

eval()和exec()的区别:

a = 1
exec("a = 2") #相当于直接执行 a=2
print(a)
a = exec("2+3") #相当于直接执行 2+3,但是并没有返回值,a 应为 None
print(a)
a = eval('2+3') #执行 2+3,并把结果返回给 a
print(a)

运行结果:

2
None
5

tips:eval()所需执行的字符串命令必须是要有返回值的!如:a=eval("a = 2")会报SyntaxError错误

posted @   li-shan  阅读(271)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示