Facebook
From Simo, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 73
  1.  
  2. def log(descriptor):
  3.     print('Function: ' + descriptor.__name__)
  4.     print(descriptor.__code__.co_varnames)
  5.    
  6. def print_args(func):
  7.     """
  8.     Function to print all args of decorated function
  9.     """
  10.  
  11.     def wrapper(*func_args, **func_kwargs):
  12.         arg_names = func.__code__.co_varnames[:func.__code__.co_argcount]
  13.         args = func_args[:len(arg_names)]
  14.         defaults = func.__defaults__ or ()
  15.         args = args + defaults[len(defaults) - (func.__code__.co_argcount - len(args)):]
  16.         params = zip(arg_names, args)
  17.         new_arg_list = [list(i) for i in params]
  18.         for key in func_kwargs:
  19.             for param in new_arg_list:
  20.                 if key == param[0]:
  21.                     param[1] = func_kwargs[key]
  22.         new_arg_list = [tuple(i) for i in new_arg_list]
  23.         result = func(*func_args, **func_kwargs)
  24.         print(f'{func.__name__} (' + ', '.join('%s = %r' % p for p in new_arg_list) + f'): {result}')
  25.  
  26.         return result
  27.  
  28.     return wrapper
  29.    
  30. @print_args
  31. def sum (a, b):
  32.     return a + b
  33.    
  34. print(sum(1, 2))