作用:
Python装饰器可以在不改变函数原实现方式的前提下,为函数添加额外的功能。
可以用来加将报错信息添加到日志中 ,django使用@login_required 用来控制登录
写法:
def decorator(func):
def wrapper(msg):
print('I am 装饰器')
return func(msg)
return wrapper
@decorator
func(msg):
print(f'msg is : {msg}')
func('hello world')
解释:
func (msg) 正常函数
msg 为传入的参数 可以为 字符串 数字 ...
decorator(func) 装饰器函数
func 为传入的参数 ,只不过他传入的是一个函数
@decorator
func(msg):
这个在函数头上写另一个函数 并@符号强调 是python 固定写法,代表上面函数是下面的装饰器
装饰器的工作流程以及为什么可以起到添加其他功能的效果?
@decorator
func(msg):
1 上面的写法等于 func=decorator(func)
函数加括号相当于执行这个函数,所以执行decorator 得到 wrapper
所以上面的形式变形为func= wrapper
2 当我执行func的时候
func(msg)= wrapper(msg)
执行wrapper函数并传入参数
核心函数 wrapper 的返回值是 func(msg) 的执行结果,在函数内部可以加上我们想执行的其他功能,但是无论执行什么都不影响最终的返回结果