一、简单装饰器:
#定义装饰器函数 def W1(main_func): def outer(): print("before") main_func() print("after") return outer #使用装饰器 @W1 def show(): pass #执行show方法 show()
执行步骤:
1、@W1
执行W1,把自己装饰的函数的函数名当做参数,即@W1 等价于W1(show)。
show()函数重新定义,即重新定义的show()函数等价于W1(show)返回值。
在重新定义的show()函数中去执行之前定义的函数。
二、带参数装饰器:
#之前函数 def Before(request,kargs): print 'before' #之后函数 def After(request,kargs): print 'after' #装饰器函数 def Filter(before_func,after_func): def outer(main_func): def wrapper(request,kargs): before_result = before_func(request,kargs) if(before_result != None): return before_result; main_result = main_func(request,kargs) if(main_result != None): return main_result; after_result = after_func(request,kargs) if(after_result != None): return after_result; return wrapper return outer #使用装饰器 @Filter(Before, After) def Index(request,kargs): print 'index'
执行步骤:
1、执行Filter(Before, After)函数。
2、@outer
3、重新定义Index()函数