装饰器核心_装饰器的写法

装饰器

Python 装饰器深入剖析_装饰器的写法_python

装饰器解决日志问题(分三个版本)

  1. v1.0版本解决
def fun1():
  print("使用功能1")
    print("日志记录")
def fun2():
  print("使用功能2")
  print("日志记录")
  1. v2.0版本解决
def writeLog():
  print("日志纪录")
def fun1():
  print("使用功能1")
  writeLog()
def fun2():
  print("使用功能2")
  writeLog()
  1. v3.0版本解决
def outfunc(func):
  def infunc():
    func()
    print("日志纪录")
  return infunc
def fun1():
  print("使用功能1")
def fun2():
  print("使用功能2")
 

fun1 = outfunc(fun1)
# 装饰器(闭包)
fun1()
  1. v4.0版本解决,装饰器
def outfunc(func):
  def infunc():
    func()
    print("日志纪录")
  return infunc

@outfunc
def fun1():
  print("使用功能1")
@outfunc
def fun2():
  print("使用功能2")

fun1()
fun2()
  1. 修改变量名,见名知意
def mylog(func):
  def infunc():
    func()
    print("日志纪录")
  return infunc

@mylog
def fun1():
  print("使用功能1")
@mylog
def fun2():
  print("使用功能2")

fun1()
fun2()
  1. 增加参数处理,可以装饰任意多个参数的函数
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函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。