python中配置文件中的函数名

时间:2014-06-10 05:55:39

标签: python json numpy

我有一个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()的函数中使用它?

1 个答案:

答案 0 :(得分:3)

您可以使用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。如果所选的方法名称不可用,您可以将其更改为要使用的默认方法。

相关问题