将函数存储在具有不同数量参数的字典中

时间:2016-11-09 23:32:01

标签: python dictionary parameters optional-parameters

我一直在使用字典替换python中的switch case。我有以下字典:

dispatcher = {"avg": data_filler.fill_missing_data_average,
              "value": data_filler.fill_missing_data,
              "drop": data_filler.drop_column}

fill_missing_data_average,fill_missing_data和drop_column都是函数。然后我按以下方式调用这些函数:

for col in self.to_do_list:
    self.pandas_dataset[col] = dispatcher[self.to_do_list[col]]()

现在,调度员调用后应该在()中输入一些内容。但是,虽然fill_missing_data_average和drop_column都只将一个pandas数据帧作为参数,但fill_missing_data同时采用pandas数据帧和数值。

有没有办法让这个方法仍然使用带有不同数量参数的函数?

1 个答案:

答案 0 :(得分:1)

如果您可以修改调度程序字典,则可以将您的函数引用包含在lambdas中。这是一种做法。这是一些例子:

def fill_missing_data_average(a):
    print(a)

def fill_missing_data(a, b):
    print(a, b)

def drop_column(a):
    print(a)

dispatcher = {"avg": lambda a,_: fill_missing_data_average(a),
              "value": lambda a,b: fill_missing_data(a,b),
              "drop": lambda a,_: drop_column(a)}


dispatcher["avg"](1,2)
dispatcher["value"](1,2)
dispatcher["drop"](1,2)

这将打印:

1
1 2
1