2016-11-09 12 views
1

私はPythonのスイッチケースを置き換えるために辞書を使っています。 fill_missing_data_average、fill_missing_data、およびdrop_columnは、すべての関数です異なる数のパラメータを持つ辞書に関数を格納する

dispatcher = {"avg": data_filler.fill_missing_data_average, 
       "value": data_filler.fill_missing_data, 
       "drop": data_filler.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

ディスパッチャディクティクトを変更できる場合は、関数リファレンスをラムダにラップすることができます。これを行うその1つの方法。ここではいくつかの例です:

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 
関連する問題