【学习分享】python装饰器

一、什么是装饰器

    装饰器(decorators)是 Python 中的一种高级功能,它允许你动态地修改函数或类的行为,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。(资料解释来自于菜鸟编程)

    单单看上述的概念可能会有点抽象,不利于我们对这个的理解。可以尝试换一种思路去理解这句话每个人都会有许多的装饰物,比如耳环、帽子、墨镜、口罩等,这些物品带上之后可以让我们看起来更加的漂亮,起到装饰的作用,但是又不会影响我们人正常的生活,转换思想,装饰器 -> 饰品、人 -> 函数,也就是说,装饰器的作用是在给对应的函数本身的基础上做修饰,并不会影响到函数本身功能的执行。(相当于函数被强化了!!!)

二、装饰器怎么用

   直接上一个标准的模板函数

def wrapper(func):
    def inner(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return inner

   接下来,解析一下这个函数:

    1、func参数是什么?

         答:这个是一个形参,这个形参会以函数的形式传递进来,也就是“被修饰的函数”,可以理解为即将被强化的函数。

    2、为什么要在内部定义一个函数inner?

          答:保存局部信息不被销毁,保证数据的安全性,本质上的修饰器就是一个闭包函数,关闭什么闭包函数呢,这个可以网上查询一下,或者想了解的在评论区留言。

    3、*args和**kwargs是什么?是必要的嘛?

          答:*args参数,名称可以叫*arrr、*ddd等,主要是前面的*号,一个*号代表这个参数可以接收不定数量的参数,最后是以元组的形式放在一起的。

                **kwargs参数,名称也是可以随便取的,前提是在规范的范围内比较好,两个**号代表这个参数可以接收不定数量的键值对形式的参数,最后作为参数传给函数,以字典的形式将参数放在一起的。(【Python】`*args` 和 `**kwargs`的用法【最全详解】_(**kwargs)-优快云博客,这个大佬有更全面的解答)

                用这两种参数格式,基本可以包含大部分的参数形式,也就意味着我们写的装饰器可以应用在非常多的函数上,可以兼容不同格式、不同数据类型的参数。(可以理解为,这顶帽子,谁都能戴)

    最主要的解析就这些了,最后执行调用传进来的参数,再将结果返回,最后返回整个装饰器的运行结果。

    4、实例演示

        现在我们用一个实际的例子来写一个装饰器,整个装饰器用于函数的执行日志打印。

def log(func):
    def wrapper(*args,**kwargs):
        print(“{}函数开始执行”.format(func.__name__))
        func(*args,**kwargs)
        print("执行结束")
    return wrapper

    这个函数很熟悉吧,和我们的模板函数其实差不多一样,接下来我们随便写一个测试函数

def test():
    print("测试用")

 这两个函数目前看来是毫无关联的,我们需要将他们结合起来,将“帽子戴在人身上”,重新写一遍测试函数

@log
def test():
    print("测试用")

现在调用这个test函数,就会打印装饰器里面的内容了

以上就是装饰器的概念理解和初步应用。

三、装饰器的其他作用

  装饰器除了日常打印外,还可用于函数的执行时间计算,事务处理、权限校验、缓存等。

小结

  装饰器在python当中扮演很重要的角色,个人最近正在学习相关的知识点,以此将自己总结的分享出来,和大家一起交流,若有出现错误或者解释模糊的地方,烦请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

重生之我在厦门做测试

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

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

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

打赏作者

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

抵扣说明:

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

余额充值