Python: 如何动态生成无需使用特殊字符的函数参数

2024-04-26 18:36: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都是基于DP类实例化中包含的其他信息构造的numpy矩阵。DP类包含一个orderedict,其中p、k和z是键(按顺序)。pu素、k素和z素都是由解算器推断出来的。我的问题是,从solver调用equation1函数的正确方法是什么。我想让这个函数尽可能简单,这样其他人就可以提交可以很容易地集成到这个系统中的方程。你知道吗

我认为使用eval可以工作,或者使用list,然后使用eval在equation1中解包list。不使用eval的最好方法是什么?或者eval在性能方面是否可以?你知道吗


Tags: 对象方法函数用户系统eval代表矩阵
1条回答
网友
1楼 · 发布于 2024-04-26 18:36:52

从你的问题来看:

alternatively using lists and then using eval to unpack the list within equation1

你可能已经意识到了这一点,但如果你没有意识到,请致电:

equation1(*list_of_parameters)

就是这样。你知道吗

同样,做

equation1(**dict_of_parameters)

将dict扩展为关键字参数。你知道吗

Eval的存在是有原因的,但是将它用于元编程通常是个坏主意。你知道吗

相关问题 更多 >