Python eval() 函数
eval() 是 Python 中用于执行字符串中的 Python 表达式的内置函数。
eval() 接收一个字符串,将其作为 Python 代码来执行,并返回执行结果。它是一个强大的功能,但使用不当会带来安全风险。
单词释义: eval 是 evaluate(求值)的缩写。
基本语法与参数
语法格式
eval(expression, globals, locals)
参数说明
- 参数 expression:
- 类型: 字符串
- 描述: 要执行的 Python 表达式。
- 参数 globals(可选):
- 类型: 字典
- 描述: 全局命名空间。
- 参数 locals(可选):
- 类型: 字典
- 描述: 局部命名空间。
函数说明
- 返回值: 返回表达式的执行结果。
- 安全警告: 不要对不可信的输入使用
eval(),可能导致代码注入攻击。
实例
示例 1:基础用法
实例
# 计算数学表达式
result = eval("1 + 2 + 3")
print(result) # 输出: 6
# 使用变量
x = 10
result = eval("x * 2")
print(result) # 输出: 20
# 复杂表达式
result = eval("2 ** 3 + 4 * 5")
print(result) # 输出: 28
# 函数调用
result = eval("len('hello')")
print(result) # 输出: 5
result = eval("1 + 2 + 3")
print(result) # 输出: 6
# 使用变量
x = 10
result = eval("x * 2")
print(result) # 输出: 20
# 复杂表达式
result = eval("2 ** 3 + 4 * 5")
print(result) # 输出: 28
# 函数调用
result = eval("len('hello')")
print(result) # 输出: 5
运行结果预期:
6 20 28 5
代码解析:
eval()可以执行算术表达式。- 可以引用已定义的变量。
- 可以调用内置函数。
示例 2:受限环境
实例
# 限制可用的函数和变量
x = 10
y = 20
# 创建一个受限的全局字典
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # 输出: 30
# 不允许访问危险函数
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"安全限制: {e}")
x = 10
y = 20
# 创建一个受限的全局字典
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # 输出: 30
# 不允许访问危险函数
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"安全限制: {e}")
运行结果预期:
30 安全限制: name '__import__' is not defined
这个例子展示了如何通过限制 globals 字典来提高 eval() 的安全性。
Python3 内置函数
点我分享笔记