Python:如何在不使用eval的情况下获得动态生成的函数参数

时间:2011-08-03 04:29:52

标签: python

我正在尝试设置一个系统,用户可以提交要解决的等式。我有一个类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,最好的方法是什么?或者在性能方面是否合适?

1 个答案:

答案 0 :(得分:3)

从你的问题:

  

或者使用列表然后使用eval来解压缩列表   在equation1中

您可能已经很清楚这一点,但如果您不是,请致电:

equation1(*list_of_parameters)

就是这样。

同样,做

equation1(**dict_of_parameters)

将dict扩展为关键字参数。

Eval是有原因的,但使用它进行元编程往往是一个坏主意。