In [27]:
def log(func):
    """
    func is a function
    """
    def wrapper(*args, **kwargs):
        print('Args: ', args)
        print('kwargs: ', kwargs)
        return func(*args, **kwargs)
    return wrapper

In [28]:
@log
def soma(x, y):
    return x + y

@log
def sub(x, y):
    return x - y

In [29]:
soma(10, 5)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-ed4210cdd843> in <module>()
----> 1 soma(10, 5)

TypeError: 'NoneType' object is not callable

In [26]:
sub(10, 8)


Args:  (10, 8)
kwargs:  {}
Out[26]:
2

In [5]:
log(soma(2,3))


Args:  (2, 3)
kwargs:  {}
Out[5]:
<function __main__.log.<locals>.wrapper>

In [8]:
def teste(*args):
    print(args)

In [13]:
teste(1,2,3, "oi", "legal")
teste()


(1, 2, 3, 'oi', 'legal')
()

In [10]:
def teste2(**kwargs):
    print(kwargs)

In [14]:
teste2(2, 1, "oi")


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-3dd7911bd2de> in <module>()
----> 1 teste2(2, 1, "oi")

TypeError: teste2() takes 0 positional arguments but 3 were given

In [15]:
def vetor(x, y=0, z=0):
    return (x, y, z)

In [16]:
vetor(1, 1, 1)


Out[16]:
(1, 1, 1)

In [17]:
vetor(1, 1)


Out[17]:
(1, 1, 0)

In [18]:
vetor(1, z=1)


Out[18]:
(1, 0, 1)

In [ ]: