Python eval() 函数
eval() 方法会解析传递给它的表达式,并在程序内部运行该表达式。换句话说,它将字符串解释为 Python 程序内的代码。
语法
eval 的语法如下:
eval(expression, globals=None, locals=None)
其中
表达式 - 传递给方法的 Python 表达式。
globals - 可用全局方法和变量的字典。
locals - 可用局部方法和变量的字典。
在下面的示例中,我们允许用户创建表达式并运行 Python 程序来评估该表达式。因此,它有助于创建动态代码。
示例
# expression to be evaluated user_expr = raw_input("Enter an expression in terms of variable a):") #nter the value of variable a = int(raw_input("Enter the value of a:")) # evaluate the expression result = eval(user_expr) # printing evaluated result print("Result = {}".format(result))
输出
运行以上代码将得到以下结果:
Enter an expression in terms of variable a):a*(a-3)+a^2 Enter the value of a:7 Result = 33
eval() 的安全问题
对于涉及 Web 应用程序或桌面程序的程序,使用 eval() 方法可能会产生安全漏洞,因为使用该程序的人员可能会提供表达式,这些表达式是系统命令,用于删除文件或获取系统中的敏感数据。为了防止这种情况,我们可以将 eval() 函数限制为某些选定的函数或变量。
防止这些漏洞的步骤如下:
在 eval() 方法中省略局部和全局变量。
这样,它将只在当前作用域中进行评估,而不会找到此作用域之外的其他变量。
仅省略局部参数
省略局部变量后,所有变量的作用域都将作为全局变量。接下来,我们将一个空字典作为全局变量传递,这允许仅内置变量可用,即使我们已将其他库导入到程序中。
示例
from time import * print(eval('dir()', {}))
广告