Decorator to print function call details - parameters names and effective values

前端 未结 5 598
失恋的感觉
失恋的感觉 2020-12-05 05:46

I want to make a function that being a decorator to another function will print that function call details - parameters names and effective values. My current implementation

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-05 06:10

    @warvariuc's answer, upgraded to Python 3:

    def dumpArgs(func):
        '''Decorator to print function call details - parameters names and effective values'''
        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 = list(zip(arg_names, args))
            args = func_args[len(arg_names):]
            if args: params.append(('args', args))
            if func_kwargs: params.append(('kwargs', func_kwargs))
            print(func.__name__ + ' (' + ', '.join('%s = %r' % p for p in params) + ' )')
            return func(*func_args, **func_kwargs)
        return wrapper  
    
    @dumpArgs
    def test(a, b = 4, c = 'blah-blah', *args, **kwargs):
        pass
    
    test(1)
    test(1, 3)
    test(1, d = 5)
    test(1, 2, 3, 4, 5, d = 6, g = 12.9)
    

提交回复
热议问题