装饰器,主要用途是在不改变原函数的基础上,添加新的功能。

  装饰器可以传递多个函数参数,一个函数可以使用多个装饰器。

# 装饰器,在用户身份认证中用的较多
def outer_0(func):
    '''
    一个装饰器
    :param func: 将需要装饰的函数作为参数func传递进来,可以是已经经过装饰的函数
    :return: 将本装饰器的返回值赋值给作为func传递进来的函数
    '''
    def inner(*args,**kwargs):
        #使用*args和**kwargs,python自动检测并对应函数参数,不许考虑函数个数及类型
        print('woooo!')
        r = func(*args,**kwargs)
        return r
    return inner

def outer(func):
    '''
    另一个装饰器,一个函数可以同时使用多个装饰器
    :param func: 将需要装饰的函数作为参数func传递进来
    :return: 将本装饰器的返回值赋值给作为func传递进来的函数
    '''
    def inner(*args,**kwargs):
        print('hi')
        r = func(*args,**kwargs)
        print('ooo')
        return r
    return inner
#下面函数经过双重装饰器,先@outer函数装饰,再outer_0函数装饰
@outer_0
#将下面@outer装饰器的inner作为outer_0的参数,返回值给inner再给f
@outer
#将下面f函数作为@outer装饰器的参数,返回值给f
def f(a):
    print('nihao!',a)
r = f('lll')
print(r)