码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-01-16 14:23:54      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:返回   定义   wrapper   pre   color   需要   filter   main   不为   

修饰带参数函数

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

 

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

标签:返回   定义   wrapper   pre   color   需要   filter   main   不为   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!