python知识点(5)-----------装饰器小结
来源:互联网 发布:ubuntu u盘安装工具 编辑:程序博客网 时间:2024/05/29 16:57
装饰器就是对函数或者方法或者类进行修饰
#装饰器#1基本函数def shi1(): print('1')#shi1()#2扩展功能def zs2(func): print('1') func() print('2')def shi2(): print('shi 2')#shi2 = zs2(shi2)#没有返回值就没有接收到#shi2()#3实现函数扩展的功能def zs3(func):#本体函数形参 def inner(): print('1') func() print('2') return inner#打包def shi3(): print('shi 3')#shi3 =zs3 (shi3)#shi3()#4语法糖def zs4(func):#本体函数形参 def inner(): print('1') func() print('2') return inner#打包带走@zs4def shi4(): print('shi4')#shi4()#5带参数的语法糖 返回值def zs5(func): def inner(a,b):#本体函数的参数的形参 a,b print('1') func(a,b) print('2') return inner@zs5def shi5(who,who2):#本体函数的参数 print(who,'在和',who2,'打架')#shi5('11','22')#5_2返回值def zs5_2(func): def inner(a,b):#接收本体函数的参数的 形参 a,b print('1') var =func(a,b)#执行本体函数,根据其 实参 print('2') return var#实现本体函数的返回值 return inner#包1@zs5def shi5_2(who,who2):#本体函数 具有参数 print(who,'在和',who2,'打架') return 'fhz'#shi5_2('22','11')#resu = shi5_2('22','11')#print(resu)#6收集参数的语法糖def zs6(func): def inner(*a,**b):#inner接收收集参数 ,形参*a **b print('1') func(*a,**b)#形参*a **b print('2') return inner@zs6def shi6(*arg,**kwargs):#本体函数 具有收集参数 print(arg,'在和','打架',kwargs)#shi6('小明',one='校长')#7带参数的装饰器def plus(arg):#接收参数arg的实参 ’ss' def zs7(func):#本体方法形参func def inner(): if arg =='ss': print('1') func() print('2') else: print('3') func() print('4') return inner#包2 return zs7#包1@plus('ss')#传参数为了控制ifdef shi7(): print('shi 7')#shi7()#8装饰器的类参数class Lei: def f1():#类方法1 print('f1') def f2():#类方法2 print('f2')def plus8(cls): def zs8(func):#本体方法形参func def inner(): cls.f1() func()#调用本体方法 cls.f2() return inner#打包2(在包1里面) return zs8#打包1@plus8(Lei)def shi8(): print('shi 8')#shi8()#9 类装饰器class Lei8: def __init__(self,arg): self.arg = arg#把arg标志传递给对象 def __call__(self, func): self.func = func#func传递给对象 return self.inner def inner(self): if self.arg =='shi': print ('hello 1') self.func()#类的func方法 print('hello2') else: print('hello 3') self.func()#类的func方法 print('hello4')@Lei8('shi')#shi 参数为arg 为了判断而特意加的def shi9(): print('shi 9')#shi9()#10 类的装饰器def zs10(cls):#形参为类cls def inner(): print('hello1') var = cls() print('hello2') return var#返回一个对象,实现实例化的原功能 return inner#打一个包,拿出去@zs10#装饰器zs10class Lei10: pass#Lei10()#resu = Lei10()#print(resu)#接收到一个对象#11 装饰器的嵌套def zs11_1(cls): def inner(): print('hello1') var = cls() print('hello2') return var return innerdef zs11_2(cls): def inner(): print('hello3') var = cls() print('hello4') return var return innerdef zs11_3(cls): def inner(): print('hello5') var = cls() print('hello6') return var return inner@zs11_1#先执行一个到cls()就向下执行@zs11_2#执行一个到cls()就向下执行@zs11_3#执行一个到cls()就向下执行 直到没有cls(),就一个一个完结def shi11(): print('shi--11')#shi11()
阅读全文