继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 的内置函数 eval

2882716
关注TA
已关注
手记 70
粉丝 0
获赞 0

Python 的内置函数 eval() 是一个功能强大的工具,用于动态执行字符串形式的 Python 表达式或代码。它接收一个字符串参数,并将其作为 Python 代码进行解析和执行,最后返回执行结果。

基本用法

result = eval(expression, globals=None, locals=None)
  • expression:要执行的字符串形式的 Python 表达式
  • globals:可选参数,指定全局命名空间(字典形式)
  • locals:可选参数,指定局部命名空间(字典形式)

典型应用场景

  1. 数学表达式计算

    x = 10
    print(eval("x * 2 + 5"))  # 输出 25
    
  2. 动态代码执行

    user_input = "print('Hello, World!')"
    eval(user_input)  # 会执行打印语句
    
  3. 配置参数解析

    config_str = "{'timeout': 30, 'retry': 3}"
    config = eval(config_str)  # 转换为字典
    

安全注意事项

eval() 存在严重的安全风险,因为它会执行任意代码:

  • 永远不要直接执行未经验证的用户输入
  • 可以通过限制命名空间来降低风险:
     safe_dict = {"__builtins__": None}
     eval("print('test')", safe_dict)  # 会报错,因为禁用了内置函数
    

替代方案

对于简单表达式计算,可以考虑更安全的替代方案:

  • ast.literal_eval():只能计算字面量表达式
  • 使用专门的解析库(如 numexpr 用于数学表达式)

性能考量

eval() 的执行效率通常低于直接编写代码,因为它需要先编译字符串再执行。在性能关键路径上应谨慎使用。

扩展用法

可以通过自定义全局和局部命名空间实现有趣的功能:

namespace = {"x": 5, "y": 10}
print(eval("x + y", namespace))  # 输出 15
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP