装饰器(装饰器带参数)

认证函数

def auth(request,kargs):
print("认证成功!")

日志函数

def log(request,kargs):
print("日志添加成功")

装饰器函数。接收两个参数,这两个参数应该是某个函数的名字(上边定义的)。

def Filter(auth_func,log_func):
# 第一层封装,f1函数实际上被传递给了main_fuc这个参数
def outer(main_func):
# 第二层封装,auth和log函数的参数值被传递到了这里,这个值是来自f1函数的参数
def wrapper(request,kargs):
# 下面代码的判断逻辑不重要,重要的是参数的引用和返回值
before_result = auth(request,kargs)
if(before_result != None):
return before_result;

        main_result = main_func(request,kargs)
        if(main_result != None):
            return main_result;

        after_result = log(request,kargs)
        if(after_result != None):
            return after_result;

    return wrapper
return outer

注意了,这里的装饰器函数有参数哦,它的意思是先执行filter函数

然后将filter函数的返回值作为装饰器函数的名字返回到这里,所以,

其实这里,Filter(auth,log) = outer , @Filter(auth,log) = @outer

@Filter(auth,log)
def f1(name,age):

print("%s 正在连接业务部门1数据接口......"%name)

调用方法

f1("jack",18)

你可能感兴趣的:(装饰器(装饰器带参数))