Python高级:装饰器详解
文章目录
知识目标
1、理解装饰器的含义;
2、掌握装饰器的使用方法;
3、掌握装饰器的使用场景。
①装饰器含义
Python的装饰器本质上是一个Python函数
他可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
简单的说装饰器就是一个用来返回函数的函数
它经常用于一些场景,比如:插入日志、性能测试、事物处理、缓存、权限校验等场景。装饰器是解决这些问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
概括的讲:装饰器的作用就是为了已经存在的对象添加额外功能
②为什么需要装饰器
def foo(): print('I am foo')def use_logging(func): print('%s is running' % func.__name__) return func@use_loggingdef bar(): print('I am Bar')bar()
③装饰器使用方法
通过上面的例子,我们可以看出装饰器的使用方法
1.先定义一个装饰函数(帽子)(也可以用类实现)
2.在定义业务函数、或者类(人)
3.最后再把这顶帽子戴在这个人头上
④装饰器使用场景
装饰器入门:日志打印器
日志打印器,实现功能:在函数执行前,先打印一行日志告知一下,要执行函数了。
在函数执行完,也不能什么反应都没有,要再打印一行告知执行结束
def logger(func): def wrapper(*args, **kw): print('我准备开始计算:{}函数了'.format(func.__name__)) # 真正执行的是这行 func(*args, **kw) print('啊哈,我计算完了,给自己加个鸡腿~~') return wrapper@loggerdef add(x, y): print('{}+{}={}'.format(x, y, x + y))
装饰器进阶:带参数的函数装饰器
@say_hello("amier")def american():print("I am Argonaut")@say_hello("China")def chinese():print("我来自中国")
装饰器高阶:不带类的类装饰器
class logger(object):def__init__(self,func):self.func=funcdef __call__(self,*args,**kwargs)基于类装饰器实现,必须被两个init 与 claa实现逻辑编辑