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

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

装饰器

image-20211212192016283

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留不住的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值