Python 中的 eval() 函数
Hiten Kanwar
2023年1月3日
2021年10月2日
Python 是一种解释性的高级编程语言。它具有清晰的代码结构和可读性以及明显的显着缩进。
eval()
函数解析表达式参数,然后将其计算为 Python 表达式。
下面提供了 eval()
函数的语法。
eval (expression, [globals[, locals]])
返回值将基于并且将是评估表达式的结果。
我们在下面的例子中评估了一个简单的加法。
x = 2
eval('x+5')
输出:
7
eval()
函数参数是一个字符串以及 globals
和 locals
的可选参数。如果提供了 globals
,它必须是一个字典。locals
可以是任何映射对象。
假设提供了 globals
字典,但没有提供键的值。生成对内置模块 builtins
字典的引用,并在表达式开始解析之前插入到关键部分下。
这粗略地表明该表达式通常可以完全访问标准的 builtins
模块。如果未提供 locals
对象,则默认为全局字典。此外,在两个字典都被省略的情况下,表达式确实在调用函数 eval()
的环境中使用 globals
和 locals
执行。
builtins
模块中存在某些可能会严重损坏系统的功能。但是当然可以阻止任何可能可疑的内容。
例如,考虑创建一个表示系统内可用内核数量的列表的示例。
from os import cpu_count
eval('[1, cpu_count()]')
输出:
[1, 8]
注意
由于这个函数把每一个字符串都当作代码来评估,因此在使用它时必须非常小心。有人可能会使用它作为安全漏洞在计算机上运行代码。例如,
eval(input())
将要求用户输入字符串并将其作为代码执行。如果导入 os
模块,你可以在设备上执行各种操作,例如删除文件和篡改系统。