【1.48】装饰器
没有修改被修饰函数的源代码,
也没有修改被修饰函数的调用方式,
但是也没有为被修饰函数添加新功能
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,
装饰器的返回值也是一个函数对象。
它经常用于有切面需求的场景,
比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。
装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
需要使用
高阶函数
函数嵌套
闭包
高阶函数定义:
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
3.满足上述条件任意一个,都可称之为高阶函数
高阶函数
解决函数调用
接收一个函数 为 被装饰函数,返回一个函数为被装饰函数 ,在装饰中又要运行一次被装饰函数
这样就会导致 被装饰函数被运行两次
函数嵌套
就是将多个函数嵌套在一起 解决被装饰函数运行一次
函数闭包
解决函数参数的传递
简单的装饰器,函数执行时间的计算:
import time
time.sleep(0.1)
def timecal(func):
def warpps(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print("函数运行的时间是%s"%(stop_time-start_time))
return res
return warpps
@timecal
def func(x):
time.sleep(0.3)
print(x*10)
@timecal
def func1(x,y):
time.sleep(0.2)
print(x*y)
@timecal
def fun2(name,age,sex):
time.sleep(0.4)
print("name:\t%s\nage:\t%s\nsex:\t%s"%(name,age,sex))
fun2("yaoming",age=18,sex="male")
浙公网安备 33010602011771号