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

标签 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 数据帧和数值。

有没有办法在采用不同数量参数的函数中仍然使用此方法?

最佳答案

如果您可以修改调度程序字典,则可以将函数引用包装为 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 - 将具有不同数量参数的函数存储在字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517747/

相关文章:

python - celery 和celeryd之间的混淆

python - 鼠标右键Pyside + Python时使QSpinBox值变为最小值

C++ std::map 不同的键寻址相同的索引

python - 按公共(public)键合并字典列表

python - 拍卖脚本(从文件输入到字典)

.net - 具有 LIKE 和 IN 条件的参数化查询

c - 通过 C exec() 执行 IPtables

python - PyQt 防止 QInputDialog 在 ESC/Enter 交叉单击时关闭

python - 如何在 python numpy 中并行化求和计算?

c++ - 效率。函数返回值与输出参数