TexasDev7062
TexasDev7062

Reputation: 112

Storing functions in a dictionary with different numbers of parameters

I've been toying with using a dictionary to replace a switch case in python. I have the following dictionary:

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

Where fill_missing_data_average, fill_missing_data, and drop_column are all functions. I am then calling these functions in the following way:

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

Now, something should go in the () after the dispatcher call. But while fill_missing_data_average and drop_column both take a only a pandas dataframe as an argument, fill_missing_data takes both a pandas dataframe and a numerical value.

Is there a way to still use this method with functions that take a different number of parameters?

Upvotes: 1

Views: 1132

Answers (1)

Marcin
Marcin

Reputation: 238517

If you can modify the dispacher dict, you could wrap your your function referneces to lambdas. Its one way of doing this. Here is some example:

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)

This will print:

1
1 2
1

Upvotes: 3

Related Questions