我想动态调用一个函数,但我没有成功。
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']
答案 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中,所有内容(classes
,functions
等)都是一个对象,如果你想让dict
从键映射到函数使用函数对象。
def test():
map = { 'a': func1, 'b': func2 }
map['a']()
def func1(): pass
def func2(): pass