python基础_装饰器
装饰器----本质上就是功能函数,为其他函数添加新的功能的函数。
装饰器设计的基本原则:
1.不修改被装饰函数的源代码(开放封闭原则)。
2.为被装饰过的函数添加新功能后,不修改被装饰函数的调用方式。
装饰器=高阶函数+函数嵌套+闭包
高阶函数:函数接收的参数是一个函数名或函数的返回值是一个函数名
函数嵌套:
def fun1(name): print('from fun1 %s' %name) def fun2(): print('from fun2') def fun3(): print('from fun3') fun3() fun2() fun1('sb') from fun1 sb from fun2 from fun3
闭包:在一个定义域里定义变量,相当于打了一个包
def fun1(name): print('from fun1 %s' %name) def fun2(): print('from fun2 %s' %name) def fun3(): print('from fun3 %s' %name) fun3() fun2() fun1('sb') from fun1 sb from fun2 sb from fun3 sb
装饰器基本框架
def timer(func): def wrapper(): func() return wrapper
加上参数
def timer(func): def wrapper(*args,**kwargs): func(*args,**kwargs) return wrapper
加上功能
import time def timer(func): def wrapper(*args,**kwargs): start_time=time.time() func(*args,**kwargs) stop_time=time.time() print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time)) return wrapper
加上返回值
import time def timer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time=time.time() print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time)) return res return wrapper
使用装饰器
import time def timer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time=time.time() print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time)) return res return wrapper def cal(array): res=0 for i in array: res+=i return res cal= timer(cal) cal(range(10))
函数[<function cal at 0x0000014B96B266A8>],运行时间是[0.0]
使用语法@
import time def timer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time=time.time() print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time)) return res return wrapper @timer #@timer就等同于cal=timer(cal) def cal(array): res=0 for i in array: res+=i return res cal(range(10)) 函数[<function cal at 0x0000019E6BB566A8>],运行时间是[0.0]

浙公网安备 33010602011771号