1、函数装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数。装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
# 装饰器函数, 接受函数名作为参数
def decorator(func):
def wrapper(): # 提示:wrapper函数中的print()操作只是最简单的示例,根据不同的需求可以换成更有实际意义的操作。
print('good job!')
func() # 在包装函数中调用被装饰函数
print('nice!')
return wrapper
@decorator #此处的效果相当于 job = decorator(job)
def job():
print('I am here!')
装饰器接受一个函数作为参数(传入的实参是被装饰的函数),装饰器内部嵌套定义另一个函数,内函数中会引用装饰器的函数,并且装饰器的返回值是内函数。
为了让内函数接受任意类型的参数,将内函数的形参定义为(*args,**kwargs)
在函数中,首先完成为被装饰的函数添加新的功能,然后调用被装饰的函数。
装饰器装饰函数的方法有两种:
方法一: 使用语法糖,在被修饰函数定义前加上 @ + 装饰器的名字
>>> @decorator
>>> def func():
>>> pass
>>> def notice(func):
>>> def wrappper(*args,**kwargs):
>>> print('......')
>>> pr