装饰器

来源:互联网 发布:python怎么往矩阵输入 编辑:程序博客网 时间:2024/05/06 03:51

装饰器概念

  • 装饰器说白了就是使用一个函数装饰另一个函数

当产品经理让你在支付的100个程序中新加如一个验证,这里装饰器就可以用了

#!/usr/bin/env python#coding:utf-8def outer(fun):#注意这里fun和装饰器关联的函数,第一次也就是Func1这个函数,也就是将函数传入装饰器中    def wrapper():        print 'feitian'        fun()    return wrapper@outer          #相当于@outer = outer(Func1)def Func1():    print "Func1"@outerdef Func2():    print "Func2"#假如下面还有n多个函数,如果都需要加验证Func1()Func2()#注意如果Func1和Func2加了参数#!/usr/bin/env python#coding:utf-8def outer(fun):    def wrapper(arg):        print 'feitian'        fun(arg)    return wrapper@outerdef Func1(arg):    print "Func1",arg@outerdef Func2(arg):    print "Func2",arg#假如下面还有n多个函数,如果都需要加验证Func1('feitian')Func2('feitian')

在装饰器前后执行任意函数,增加程序的可移植行

#!/usr/bin/env python#coding:utf-8def before():    print 'before'def after():    print 'after'def filter(before,after):    def outer(main):        def wrapper(arg):            before_result= before()            if(before_result !=None):                return before_result            main_result = main(arg)            if(main_result != None):                print main_result                return main_result            after_result = after()            if(after_result == None):                print after_result        return wrapper    return outer@filter(before,after)def Func1(arg):    print "Func1",arg@filter(before,after)def Func2(arg):    print "Func2",argFunc1('feitian')Func2('feitian')#运行结果:beforeFunc1 feitianafterbeforeFunc2 feitianafter#这个代码很简单,请大家自行理解,和上面差不多,就只是多了外层的函数,也就是被装饰函数运行前执行的函数,和运行后执行的函数。
原创粉丝点击