def log(descriptor): print('Function: ' + descriptor.__name__) print(descriptor.__code__.co_varnames) def print_args(func): """ Function to print all args of decorated function """ def wrapper(*func_args, **func_kwargs): arg_names = func.__code__.co_varnames[:func.__code__.co_argcount] args = func_args[:len(arg_names)] defaults = func.__defaults__ or () args = args + defaults[len(defaults) - (func.__code__.co_argcount - len(args)):] params = zip(arg_names, args) new_arg_list = [list(i) for i in params] for key in func_kwargs: for param in new_arg_list: if key == param[0]: param[1] = func_kwargs[key] new_arg_list = [tuple(i) for i in new_arg_list] result = func(*func_args, **func_kwargs) print(f'{func.__name__} (' + ', '.join('%s = %r' % p for p in new_arg_list) + f'): {result}') return result return wrapper @print_args def sum (a, b): return a + b print(sum(1, 2))