day 12 python的装饰器
1·装饰器 ①装饰器的作用:在不改变函数的基础上,在函数的前后添加新的功能 ②使用原则:开放封闭原则(开放:对扩展时开放的;封闭:对修改是封闭的) 2·语法糖:@装饰函数 3·本节涉及的库:time? ?(import time) print(time.tim())#获取当前时间 print(time.sleep(时间间隔))? #让程序在执行到这里的时候停一会儿s 装饰器的固定模式: 例: import time def timmer(f):? ? ?#装饰器函数?,f为被装饰函数 def inner( ): start = time.time() ret = f( ) end = time.time() return ret return inner @timmer #语法糖,装饰器函数的调用方法? ?func= timmer(func)-->inner def func(): #被装饰函数 time.sleep(0.1) print(‘博主真帅!‘) return ‘无与伦比‘? 带有参数的装饰器函数: import time def timmer(f):? ? ?#装饰器函数 def inner(*args,**kwargs): start = time.time() ret = f(*args,**kwargs) end = time.time() return ret return inner @timmer #语法糖,装饰器函数的调用方法? ?func= timmer(func)-->inner def func(a,b): #被装饰函数 time.sleep(0.1) print(‘博主真帅!‘) return ‘无与伦比‘? 需要理解装饰函数的在程序中的执行顺序: 装饰器的进阶:(函数的停止调用,及三层函数) 当存在多个参数时,500个函数的时候,如何停止函数的调用 import time flage = True def wrapper(flage): def timmer(f): def inner(*args,**kwargs): if flage: start =time.time() ret? = f(*args,**kwargs) end = time.time() print(end-start) return ret else: ret = f(*args,**kwargs) print(‘函数在这里:’) return inner return timmer @wrapper(flage)? ? ?#相当于wrapper(flage) = timmer,先执行wrapper(),再调用函数timmer def func(a.c): print(‘11‘) func(1,2) 多个函数装十一个函数: def wrapper1(f):#f =func def inner1(): print(‘wrapper1 after om func‘) ret = f() print(‘wrapper1 after om func‘) return inner1 def wrapper2(f): #f=inner1 def inner2(): print(‘wrapper2 after om func‘) ret = f() print(‘wrapper2 after om func‘) return inner2 def wrapper3(f): #f =inenr2 def inner3(): print(‘wrapper3 after om func‘) ret = f() print(‘wrapper3 after om func‘) return inner3 @wrapper3? #func =wrapper3(func)=wrappr3(func) = inner3 @wrapper2 #func =wrapper2(func)= wrapper2(inner1) = inner2 @wrapper1 #func = wrapper1(func)-->inner1 #三个装饰器的使用顺序,先执行最接近被装饰的那个装饰器 def func(): func()? #-->inner3()-->inner2()-->inner1() #应用: 可应用于记录用户的来访情况 计算这个函数的执行时间 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |