我如何在数字上集成一个字符串与变量在python?



免责声明:这里完全是新手,请尽量保持简单。

我的计划是使用scipy.integrate.quad()eval()(代码感染在我的情况下不会是一个问题)。当方程中唯一的变量是积分变量时,这可以正常工作:

from scipy.integrate import quad
equation = '1+2*x'
result = quad(lambda x: eval(equation), 0, 1)

添加额外的变量,只要它们被定义:

from scipy.integrate import quad
equation = 'A+B*x'
A=1
B=2
result = quad(lambda x: eval(equation), 0, 1)

然而,如果我试图给eval()这些额外的变量与字典,我应该,它突然开始抱怨,它找不到x:

from scipy.integrate import quad
equation = 'A+B*x'
paramsDict = {'A':1, 'B':2}
result = quad(lambda x: eval(equation, paramsDict), 0, 1)
>>> NameError: name 'x' is not defined

所以显然eval()可以返回一个函数与未定义的变量没有问题,除非我给它一些值工作?我该如何解决这个问题?

如果您看一下eval的文档,您会看到第二个参数设置了eval函数可以看到的范围,特别是它提供了eval可以使用的全局变量集。因此,在您的情况下,它将失去对x的访问权。这可以通过几种方式解决,我的快速解决方案如下:

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

最新更新