知识目标
1、理解装饰器的含义; 2、掌握装饰器的使用方法; 3、掌握装饰器的使用场景。
①装饰器含义
Python的装饰器本质上是一个Python函数 他可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
简单的说装饰器就是一个用来返回函数的函数
它经常用于一些场景,比如:插入日志、性能测试、事物处理、缓存、权限校验等场景。装饰器是解决这些问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。 概括的讲:装饰器的作用就是为了已经存在的对象添加额外功能
②为什么需要装饰器
def foo():
print('I am foo')
def use_logging(func):
print('%s is running' % func.__name__)
return func
@use_logging
def 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
@logger
def 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=func
def __call__(self,*args,**kwargs)
基于类装饰器实现,必须被两个init 与 claa实现逻辑编辑
|