python 实现带参数的装饰器
# coding:utf8
__author__ = 'bluesli'
def before(request,kwarg):
print('before')
def after(request,kwarg):
print('after')
def Filter(before_fun,after_fun):
def outer(main_fun):
def wrapper(request,kwarg):
before_ret = before_fun(request,kwarg)
if before_ret!=None:
return before_ret
afrer_ret = after_fun(request, kwarg)
if afrer_ret != None:
return afrer_ret
main_ret = main_fun(request, kwarg)
if afrer_ret != None:
return main_ret
return wrapper
return outer
@Filter(before,after)
def index(request,kwarg):
print('index')
index('ll','kk')
执行过程:
4:(带参数的装饰器)装饰器本身就会将被装饰的函数作为参数传入,如果我们自己定义函数再从新作为参数时怎么辨别?: 步骤:执行filter函数2:生成outer即@outer, 最后又将被装饰函数复制成新的函数,执行新的需求; 原理就是:在装饰器的基础之上,进一步再向装饰器传参数; 复杂的装饰器很少用到,但是这是一种框架的思想,无需考虑实现的过程,只需要具体实现功能的函数;
posted on 2018-05-23 21:50 blueslichanghui 阅读(175) 评论(0) 收藏 举报
浙公网安备 33010602011771号