装饰器 装饰带参数的函数和添加函数

修饰带参数函数

1.带参数函数func1

def func1(arg):
    print arg

2.装饰器

def outer(fun):
    def wrapper(arg):
        print 'test'
        fun(arg)
    return wrapper

装饰器outer时期返回函数wrapper,由于要func1 带有参数,如需要将wrapper的函数带上参数,func1被装饰后重新定义为:

func1(arg)=wrapper(arg)=
                         {
                             print 'test'
                             func1(arg)     
                             }

在修饰器中使用函数修饰

要添加的额外函数有

def before():
    print 'before'
    
def after():
    print 'after'

主体函数:

def main():
    print 'main'

装饰器:

def filter(before_func,after_func):        #要在主体函数前 和 函数后再执行的函数名
    def outer(main_func):                   
        def wrapper():
             before_result=before_func()   #如果前函数不为None,则执行
             if(before_result!=None):
                 return before_result
             main_result=main_func()        #执行主体函数
             if(main_result!=None):
                 return main_result
             after_result=after_func()     #如果后函数不为None,则执行
             if(after_result!=None):
                 return after_result
        return wrapper
    return outer

执行结果,打印出:

before
main
after

原文地址:https://www.cnblogs.com/white-small/p/6289281.html