In [1]:
from functools import wraps

In [18]:
def first_check(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        print('first check, pre wrapped func')
        returned_f = f(*args, **kwargs)
        print('first check, post wrapped func')
        return returned_f
    return decorated

def second_check(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        print('second check, pre wrapped func')
        returned_f = f(*args, **kwargs)
        print('second check, post wrapped func')
        return returned_f
    return decorated

@first_check
@second_check
def say_hello(name='World'):
    print('Hello, {0}!'.format(name))
    return name

In [19]:
say_hello()


first check, pre wrapped func
second check, pre wrapped func
Hello, World!
second check, post wrapped func
first check, post wrapped func
Out[19]:
'World'

In [ ]: