从字典地图

时间:2018-03-21 11:12:54

标签: python

我想动态调用一个函数,但我没有成功。

available.append({
     'analysis_name': 'Category X Total Payment',
     'col_name': 'VALUE',
     'required_cols': ['Category','VALUE'],
     'agg':'SUM',
     'analysis_type': 'pareto-bar',
     'func': 'draw_pareto'})
available.append({
    'analysis_name': 'Category X Count',
    'col_name': 'Count',
    'required_cols': ['Category','VALUE'],
    'agg':'Count',
    'analysis_type': 'pareto-bar',
    'func': 'draw_pareto'})

我有一个映射函数名的数组,我想通过用户选项调用这个函数:

def runAnalysis(self, analysis):
    required_cols = analysis['required_cols']
    agg = analysis['agg']
    col_name = analysis['col_name']
    analysis['data'] = self.draw_pareto(required_cols[0], required_cols[1], agg, col_name) // this line must be dynamically
    return analysis['data']

3 个答案:

答案 0 :(得分:1)

更改您的数据以包含该功能:

available.append({
    'analysis_name': 'Category X Count',
    'col_name': 'Count',
    'required_cols': ['Category','VALUE'],
    'agg':'Count',
    'analysis_type': 'pareto-bar',
    'func': self.draw_pareto})

然后叫它:

analysis['data'] = analysis['func'](required_cols[0], required_cols[1], agg, col_name) // this line must be dynamically

答案 1 :(得分:1)

如果您不能更改字典以包含函数本身,而不是其名称,如其他答案所示,当您可以使用getattr获取与名称对应的函数时:

func = getattr(self, analysis['func'])
analysis['data'] = func(required_cols[0], required_cols[1], agg, col_name)

答案 2 :(得分:0)

在python中,所有内容(classesfunctions等)都是一个对象,如果你想让dict从键映射到函数使用函数对象。

def test():
    map = { 'a': func1, 'b': func2 }
    map['a']()

def func1(): pass
def func2(): pass