Este es mi código:

def test_deco(func):
    def innrer_func(*args,**kwargs):
        print('args : ',args)
        print('kwargs : ',kwargs)
        return func(*args , **kwargs)
    return innrer_func

@test_deco
def add (x = 2, y= 3 ) :
    return x + y
print(add())

Y esta es mi salida:

args :  ()
kwargs :  {}
5

Y mi pregunta es por qué *args y **kwargs están vacíos pero tengo el resultado correcto y ¿cómo puedo pasar x y y al test_deco?

0
Iman Hosseini Pour 28 ago. 2020 a las 19:07

1 respuesta

La mejor respuesta

Debo usar el módulo inspect para hacer esto.

import inspect
def test_deco(func):
    def innrer_func(*args):
        result = func(*args)
        try:
            print(f'{args[0]} + {args[1]} = {result}')
        except IndexError:
            default_args = inspect.getcallargs(func , *args)
            print(f'{default_args["x"]} + {default_args["y"]} = {result} | Default Values')
        finally:
            return result
    return innrer_func

@test_deco
def add (x = 5, y = 8 ) :
    return x + y
1
Iman Hosseini Pour 28 ago. 2020 a las 18:15