【问题标题】:Storing functions in a dictionary with different numbers of parameters将函数存储在具有不同数量参数的字典中
【发布时间】:2016-11-09 23:32:00
【问题描述】:

我一直在玩弄使用字典来替换 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 数据帧和一个数值。

有没有办法在接受不同数量参数的函数中继续使用这种方法?

【问题讨论】:

    标签: python dictionary parameters optional-parameters


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多