在具有不同数量参数的字典中存储函数
Storing functions in a dictionary with different numbers of 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 数据框和一个数值。
有没有办法仍然将此方法用于采用不同数量参数的函数?
如果您可以修改调度程序字典,则可以将您的函数引用包装到 lambda 表达式中。这是这样做的一种方式。这是一些例子:
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
我一直在尝试使用字典来替换 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 数据框和一个数值。
有没有办法仍然将此方法用于采用不同数量参数的函数?
如果您可以修改调度程序字典,则可以将您的函数引用包装到 lambda 表达式中。这是这样做的一种方式。这是一些例子:
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