Python中装饰器超详细讲解,看不懂尽管来砍我!

本文深入讲解Python中的装饰器概念,包括闭包的理解、装饰器的作用及使用方式,并提供了多个实例来展示如何装饰不同类型的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中装饰器的那些事儿…

说到装饰器,我们需要首先理解下闭包的概念,走起!
定义:具有执行环境的函数
满足三个条件:
1.外部函数中定义一个内部函数
2.内部函数中使用外部函数的局部变量
3.外部函数将内部函数作为返回值返回

此时的内部函数就叫闭包

怎么缩呢?来看个例子吧!(滑稽)

#先定义一个外部函数
def wai(n):
    #在外部函数中定义一个内部函数
    def nei():
    	# 内部函数中使用外部函数的局部变量
        return n * n
    #内部函数作为返回值
    return nei
    #对函数进行调用
    f1 = wai(10)
    f2 = nei(4)
    
   print(f1())
   print(f2())    

打印结果为:
在这里插入图片描述

下面进入正题:装饰器

装饰器

  • 作用:当需要改变一个函数原有的功能时,但是不想/不能改变原来的函数,可以通过装饰器解决

  • 使用:

    • 装饰器其实就是一个函数,该函数有一个参数(函数类型),返回一个闭包
    • 在返回的闭包中调用传递进来的函数,然后在调用函数的前后就可以添加内容
  • 示例:

    #定义一个装饰器(参数为一个函数)
    def zhuangshiqi(func):
        def wrapper():
            print('开始装饰')
            func()
            print('装饰结束')
    
        return wrapper
    
    
    @zhuangshiqi
    # 相当于执行了:test = zhuangshiqi(test)
    def test():
        print('for test')
        
    # t2 = zhuangshiqi(test)
    # t2()
    
    # test = zhuangshiqi(test)
    test()
    
    
    

执行结果为:

Python中的装饰器的分类:

def  cool(func):
    def wrapper():
        print('Vans卫衣')
        func()
        print('Air Jordan')
    return wrapper
 @cool
 #屌丝变高富帅
 def   diaosi():
      print("屌丝大变身?")
 diaosi()



装饰带参无返回值的函数
 def zhuangshiqi(func):
      def wrapper(*args, **kwargs):
          print('开始装饰')
          func(*args, **kwargs)
          print('装饰结束')
      return wrapper


  @zhuangshiqi
  def test(n):
      print('I like num {}'.format(n))


  test(250)

装饰有参有返回值的函数
def zhuangshiqi(func):
      def wrapper(*args, **kwargs):
          print('开始装饰')
          ret = func(*args, **kwargs)
          print(ret)
          print('装饰结束')
          return ret
      return wrapper


  @zhuangshiqi
  def add(a, b):
      return a + b


  print(add(3, 5))

关于Python中装饰器的讲解就讲到这里,希望能帮助到大家!
如果觉的还可以的话点个赞再走吧…

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值