You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何对含变量的字符串表达式执行数值积分?

问题原因

你给eval()传入第二个参数作为自定义全局命名空间后,eval就只会在你提供的这个字典中查找所有用到的变量,不会再到外层lambda函数的作用域里找x,而你传入的paramsDict里只有A、B两个参数,自然会提示找不到x。

解决方法

eval本身支持第三个参数作为局部命名空间,你只需要把lambda传入的积分变量x放到局部命名空间里传给eval即可:

from scipy.integrate import quad

equation = 'A+B*x'
paramsDict = {'A':1, 'B':2}

# 第三个参数传入局部变量x,eval查找顺序:局部命名空间 → 全局命名空间
result = quad(lambda x: eval(equation, paramsDict, {'x': x}), 0, 1)
print(result)

你也可以选择把x直接合并到全局命名空间字典里,效果完全一致:

result = quad(lambda x: eval(equation, {**paramsDict, 'x': x}), 0, 1)

补充(新手友好说明)

eval()的完整参数规则是eval(待执行表达式, 全局变量字典, 局部变量字典):

  • 如果你传了自定义全局变量字典,eval就不会使用当前代码运行环境的全局变量,只会在你给的这个字典里找变量
  • 如果同时传了局部变量字典,eval会先在局部字典里找变量,找不到再去全局字典里找,都找不到才会报错

内容的提问来源于stack exchange,提问作者asdf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:39:04