免责声明:这里完全是新手,请尽量保持简单。
我的计划是使用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)