Python eval()和exec()函数

2021-01-30 17:13

阅读:598

标签:范围   eval   区别   print   mil   UNC   string   直接   全局   

相同点: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错误

Python eval()和exec()函数

标签:范围   eval   区别   print   mil   UNC   string   直接   全局   

原文地址:https://www.cnblogs.com/lishanstudy/p/12820273.html


评论


亲,登录后才可以留言!