python - python 配置文件中的函数名称

标签 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() 的函数中使用它?

最佳答案

您可以使用 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/

相关文章:

json - 如何在 Azure 数据工厂中使用此 API

json - 使用 spark 和 Scala 读取文本文件中的 JSON

Python(17874,0x111e92dc0)malloc : can't allocate region

python - 在 python 中替换重复 np.vstack 的有效方法?

python - 我正在使用 fastcgi 运行 nginx,这就是我为 python 应用程序提供服务所需的全部吗?

python - 已编辑 : How do I create a "Nested Loop" that returns an item to the original list in Python and Scrapy

python - "not all arguments converted during string formatting"当to_sql

javascript - Selenium + XPath : element not found

c# - 如何区分一个 RabbitMQ 队列中的两个 JSON 对象?

python - 如何创建空的 numpy 数组来存储不同类型的数据