eval()

在Python中evel()函数的语法格式为eval(expression, globals=None, locals=None),注意后面还有globals参数和locals参数。eval()函数用于执行一个字符串表达式,并且返回该表达式的值。

expression:表达式,上面提到eval函数用于执行一个字符串表达式. globals:该部分必须是字典,否则程序会出错。当定义了globals 参数之后eval函数的作用域会被限定在globals中。 locals:该参数掌控局部的命名空间,功能和globals类型,不过当参数冲突时,会优先执行locals处的参数。

expression参数示例

a=10;
print(eval("a+1"))
1
2

运行结果为11

【解析】 因为此处没有指定globals和locals,所以直接执行expression部分的内容。该程序的效果等价于a=10 print(a+1)。

globals参数示例

a=10;
g={'a':4}
print(eval("a+1",g))
1
2
3

运行结果为5

【解析】因为现在指定了globals,所以在expression部分的作用域就是globals指定的字典范围内。所以此时外面的a=10被屏蔽,取用字典中的值。

locals参数示例

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

运行结果为116

【解析】根据上面题目的练习我们知道了当有globals和locals时作用的范围域是在globals和locals中,所以a=10,b=20,c=30不会被应用。a和c的值分别去字典g和字典t中的值,当globals和locals中都有参数b时取locals中的值。所以a=6,b=100,c=10

  • eval函数非常的方便,我们可以使用一行代码就实现计算器的功能print(eval(input('请输入')))。但是因为它具有可以将字符串转成表达式执行的特性,所以它也就可以去执行系统命令。这样很容易被别有用心的人用来执行系统命令,删除关键系统文件。