Я ищу лучший способ комбинировать функцию со словарем, который содержит больше элементов, чем функциональные входы
базовая ** распаковка kwarg в этом случае не выполняется:
def foo(a,b):
return a + b
d = {'a':1,
'b':2,
'c':3}
foo(**d)
--> TypeError: foo() got an unexpected keyword argument 'c'
После некоторых исследований я придумал следующий подход:
import inspect
# utilities
def get_input_names(function):
'''get arguments names from function'''
return inspect.getargspec(function)[0]
def filter_dict(dict_,keys):
return {k:dict_[k] for k in keys}
def combine(function,dict_):
'''combine a function with a dictionary that may contain more items than the function inputs '''
filtered_dict = filter_dict(dict_,get_input_names(function))
return function(**filtered_dict)
# examples
def foo(a,b):
return a + b
d = {'a':1,
'b':2,
'c':3}
print combine(foo,d)
--> 3
Мой вопрос: это хороший способ справиться с этой проблемой, или есть лучшая практика или есть механизм на языке, который я пропускаю, возможно?