С помощью Получение имен параметров метода в python , здесь вы найдете решение decorator
, чтобы вы могли применить его к любой функции:
def compactor(func):
import inspect
def compactor_impl(*args, **kwargs):
arg_names = inspect.getargspec(func)[0]
return dict(zip(arg_names, args))
return compactor_impl
@compactor
def package(var1, var2, var3):
pass
@compactor
def package2(var1, var2, var3, supervar):
pass
assert package(1, 2, 3) == {'var1': 1, 'var2': 2, 'var3': 3,}
assert package2(1, 2, 3, 'boh') == {'var1': 1, 'var2': 2, 'var3': 3, 'var3': 3, 'supervar': 'boh'}
Я предположил, что функции ничего не делают, кроме как возвращают пары name-value
. Возможно, вы захотите добавить некоторые проверки (утверждения), чтобы гарантировать, что len(args) == len(arg_names)
и что kwargs
пусто, потому что это не будет проверяться после применения декоратора.