我正在写一个像这样(简化)的类来表示概率分布。我想要的是仅使用其类型和参数初始化对象 Distribution,并且它具有根据其类型分配的一些功能。
functions = {'exp':{
'parameters': ['l'],
'pdf': lambda x,p: exp(x/p[0])*p[0],
'cdf': lambda x,p: 1-exp(x/p[0]) },
'uniform':{
'parameters': ['x1','x2'],
'pdf': lambda x,p: 1/(p[1]-p[0]),
'cdf': lambda x,p: (x-p[0])/(p[1]-p[0]) }
}
class Distribution:
def __init__(self,dist_type,**parameters):
self.dist_type = dist_type
self.parameters = parameters
self.p = [ self.parameters[z] for z in functions[dist_type]['parameters'] ]
for key,val in functions[dist_type].items():
if key == 'parameters':
pass
else
setattr(self, key, lambda x:val(x,self.p))
dist = Distribution('exp',l=3.5)
现在,当我运行 type(dist.pdf) 时,我得到它是一个 lambda 函数,但是当我运行该函数时,说 dist.pdf(4.0) 一个 TypeError: 'list' object is not a callable。
在旁注中,代码的样式/复杂性如何?