装饰器核心_装饰器的写法
装饰器
装饰器解决日志问题(分三个版本)
- v1.0版本解决
def fun1():
print("使用功能1")
print("日志记录")
def fun2():
print("使用功能2")
print("日志记录")
- v2.0版本解决
def writeLog():
print("日志纪录")
def fun1():
print("使用功能1")
writeLog()
def fun2():
print("使用功能2")
writeLog()
- v3.0版本解决
def outfunc(func):
def infunc():
func()
print("日志纪录")
return infunc
def fun1():
print("使用功能1")
def fun2():
print("使用功能2")
fun1 = outfunc(fun1)
# 装饰器(闭包)
fun1()
- v4.0版本解决,装饰器
def outfunc(func):
def infunc():
func()
print("日志纪录")
return infunc
@outfunc
def fun1():
print("使用功能1")
@outfunc
def fun2():
print("使用功能2")
fun1()
fun2()
- 修改变量名,见名知意
def mylog(func):
def infunc():
func()
print("日志纪录")
return infunc
@mylog
def fun1():
print("使用功能1")
@mylog
def fun2():
print("使用功能2")
fun1()
fun2()
- 增加参数处理,可以装饰任意多个参数的函数
def mylog(func):
def infunc(*args,**kwargs):
func(*args,**kwargs)
print("日志纪录")
return infunc
@mylog
def fun1():
print("使用功能1")
@mylog
def fun2(a,b):
print(f"使用功能2:{a},{b}")
fun1()
fun2(100,200)
装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。