• 一文带你迅速掌握python装饰器


    近期从网络中看到一张图, 将闭包看为了高大上的技术. 今天就带着大家来熟悉和掌握python中的装饰器如何实现及装饰器的原理
    在这里插入图片描述

    一.什么是闭包?

    闭包就是能够读取其他函数内部变量的函数。例如在大部分编程语言中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。

    在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

    一句话说就是,在函数中再嵌套一个函数,并且引用外部函数的变量,这就是一个闭包了。

    如下图所示: 在myfunc函数中, 嵌套函数 use_c 即为闭包函数.
    在这里插入图片描述
    结合闭包,就可以实现函数装饰器了。

    二.闭包在装饰器的应用: @语法糖

    @语法糖的作用一是:

    在一个函数上面添加修饰符 @另一个函数名 的作用是将这个修饰符下面的函数作为该修饰符函数的参数传入。

    @语法糖的作用二是:

    如果被@的函数是一个闭包函数,那么就把被修饰函数的参数传给闭包的内函数,结合位置参数列表args和可变参数字典kwargs,就可以完成所有参数的接收。

    案例: 在inner上面添加@outer,是将inter(函数)作为outer的参数传入

    在这里插入图片描述
    上述案例中, 调用inner传入的实参数据(1,2) 会传递给装饰器outer的闭包函数wrapper中的*args作为位置参数.

    1.把inner的参数传给wrapper(闭包内函数)

    2.使用*args可以接收所有的位置型参数,**kwargs可以接收所有的非必填参数

    3.参数类型是以实际传参为准

    备注:一定要在闭包的内函数里面调用被装饰函数,否则被装饰函数本身不会执行

    三.装饰器是什么?

    装饰器又名(函数/类)装饰器,顾名思义,就是装饰(函数/类)的,用来增强(函数/类)的功能。

    案例: 你写了一个函数,计算两个数相加需要的时间
    在这里插入图片描述
    然而:现在主管要你计算减法的时间,当然有可能还要乘法,除法. 怎么办?

    你可能会考虑写四个函数,或者改造函数,这样显得很麻烦,也不灵活,万一计算时间的代码有改动,你得每个函数都要改动。

    Python提供了更好的办法,就是装饰器
    在这里插入图片描述
    通过@timer装饰器, 修饰 add, sub 函数, 当然乘法, 除法等等都是相同的.

    此时, 无论被装饰函数 add sub中的代码有任何改动, 都不影响装饰器自身的运行与计算.

    四. 装饰器运行的顺序

    被装饰函数(inner)在哪里执行要看你在哪里调用(只会执行一次)

    最先执行的是outer

    当outer运行完成后,在return的地方执行了wrapper

    以上就是闭包与装饰器的实现及运行原理, 期望能够给大家的理解带来帮助.

    最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

    在这里插入图片描述

    这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

    如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

    敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

    自学推荐B站视频:

    零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

    自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

    在这里插入图片描述

  • 相关阅读:
    IceRPC之依赖注入>快乐的RPC
    机器学习分类模型评价指标之ROC 曲线、 ROC 的 AUC 、 ROI 和 KS
    【Python21天学习挑战赛】-列表 & 元组 & range
    2023牛客OI赛前集训营-提高组(第一场) 情景剧
    搭建本地人工智能框架LocalAI
    2_ZYBO FPGA 按键控制蜂鸣器 key_beep=>key_led
    STM32F4X 内部FLASH使用
    计算机视觉与深度学习-经典网络解析-ZFNet-[北邮鲁鹏]
    uboot源码分析(基于S5PV210)之启动第一阶段
    如果让你和你的团队去用yolov8 做一款能检测箭靶自动报靶的系统,你会怎么做?
  • 原文地址:https://blog.csdn.net/xfw17397388089/article/details/126319108