装饰器
来源:互联网 发布: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#这个代码很简单,请大家自行理解,和上面差不多,就只是多了外层的函数,也就是被装饰函数运行前执行的函数,和运行后执行的函数。