python之装饰器

一、简单装饰器:

 #定义装饰器函数
 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()函数

上一篇:快速发展的Swift是否将淘汰Objective-C?


下一篇:BNF 巴科斯范式