我正在尝试设置一个系统,用户可以提交要解决的等式。我有一个类DP,它代表问题的完整参数化。另一个类dpsolver接受一个dp对象,构造矩阵,并将解决问题。
创建DP对象时,其中一个属性是函数引用,其函数如下:
def equation1(r, tx, p, p_prime, k, k_prime, z, z_prime ):
""" it is assumed all arguments are same sized ndarray or scalar"""
inv = k_prime - 0.8 * k
v = np.power(z_prime * inv, 0.75) * (1-tx) - p*tx + p_prime
return(v)
r和tx是DP对象中定义的标量。 p,p_prime,k,k_prime,z,z_prime都是numpy矩阵,它们是根据DP类实例化中包含的其他信息构造的。 DP类包含一个OrderedDict,它有p,k和z作为键(按此顺序)。 p_prime,k_prime和z_prime都是求解器推断出来的。我的问题是,从求解器调用equation1函数的正确方法是什么。我希望这个功能尽可能简单,因此其他人可以提交可以轻松集成到该系统中的方程式。
我在想使用eval可以工作,或者使用列表然后使用eval来解压方程式1中的列表。没有使用eval,最好的方法是什么?或者在性能方面是否合适?
答案 0 :(得分:3)
从你的问题:
或者使用列表然后使用eval来解压缩列表 在equation1中
您可能已经很清楚这一点,但如果您不是,请致电:
equation1(*list_of_parameters)
就是这样。
同样,做
equation1(**dict_of_parameters)
将dict扩展为关键字参数。
Eval是有原因的,但使用它进行元编程往往是一个坏主意。