Python 中的 eval() 函数

Hiten Kanwar 2023年1月3日 2021年10月2日
Python 中的 eval() 函数

Python 是一种解释性的高级编程语言。它具有清晰的代码结构和可读性以及明显的显着缩进。

eval() 函数解析表达式参数,然后将其计算为 Python 表达式。

下面提供了 eval() 函数的语法。

eval (expression, [globals[, locals]])

返回值将基于并且将是评估表达式的结果。

我们在下面的例子中评估了一个简单的加法。

x = 2
eval('x+5')

输出:

7

eval() 函数参数是一个字符串以及 globalslocals 的可选参数。如果提供了 globals,它必须是一个字典。locals 可以是任何映射对象。

假设提供了 globals 字典,但没有提供键的值。生成对内置模块 builtins 字典的引用,并在表达式开始解析之前插入到关键部分下。

这粗略地表明该表达式通常可以完全访问标准的 builtins 模块。如果未提供 locals 对象,则默认为全局字典。此外,在两个字典都被省略的情况下,表达式确实在调用函数 eval() 的环境中使用 globalslocals 执行。

builtins 模块中存在某些可能会严重损坏系统的功能。但是当然可以阻止任何可能可疑的内容。

例如,考虑创建一个表示系统内可用内核数量的列表的示例。

from os import cpu_count
eval('[1, cpu_count()]')

输出:

[1, 8]
注意
由于这个函数把每一个字符串都当作代码来评估,因此在使用它时必须非常小心。有人可能会使用它作为安全漏洞在计算机上运行代码。例如,eval(input()) 将要求用户输入字符串并将其作为代码执行。如果导入 os 模块,你可以在设备上执行各种操作,例如删除文件和篡改系统。