我有一个 JSON 配置文件,它告诉我要从哪种发行版中进行采样。例如:
{ "parameter1" : { "distribution" : "exponential", "mean" = 5},
"parameter2" : { "distribution" : "poisson", "mean" = 3} }
上面的列表可能是详尽的。我需要一个函数来读取这个 json 文件,并将适当的分布返回给调用代码。
我尝试使用字符串连接和 eval()
,但这直接给了我样本值。
我应该能够将对象/函数返回给调用函数。
谁能帮我做一下吗?
我的尝试:
import numpy.random as random
def getDistribution(distribution, params):
string= 'random.'+distribution
return eval(string)(params["mean"])
这会向我返回一个值。有没有办法返回实际分配函数的句柄,例如 random.exponential()
或random.poisson()
我可以在调用 getDistribution()
的函数中使用它?
最佳答案
您可以使用 getattr 返回方法(这是 random
的属性):
def get_method(name):
return getattr(random, name, None)
def get_distribution(method, params):
return method(params['mean'])
method_name = 'exponential'
method = get_method(method_name)
if method:
results = get_distribution(method, params)
else:
raise AttributeError('No such method in random: {}'.format(method_name))
getattr
采用可选的第三个参数,该参数是找不到属性时要返回的值。我使用它来显式返回 None
。如果所选方法名称不可用,您可以将其更改为要使用的默认方法。
关于python - python 配置文件中的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133820/