python中的装饰器的真正含义和用法

闭包:

闭包是python中的一个很实用的写法,可以使得用户在函数中调用该函数外的函数的变量,使得该变量常驻于内存中。

闭包函数:

输入是函数,输出也是一个函数。

装饰器的写法是python闭包的语法糖。

面试中经常面试到的调用结果题目:

python 复制代码
# ---encoding:utf-8---
# @Author  : CBAiotAigc
# @Email   :1050100468@qq.com
# @Site    : 
# @File    : 两个装饰器.py
# @Project : PythonUtils
# @Software: PyCharm
def wrapper1(func):
    print("set wrapper1")

    def inner_wrapper1(*args, **kwargs):
        print("进入inner_wrapper1")
        ret = func(*args, **kwargs)
        print("离开inner_wrapper1")
        return ret

    return inner_wrapper1


def wrapper2(func):
    print("set wrapper2")

    def inner_wrapper2(*args, **kwargs):
        print("进入inner_wrapper2")
        ret = func(*args, **kwargs)
        print("离开inner_wrapper2")
        return ret

    return inner_wrapper2


@wrapper1
@wrapper2
def func():
    print("func 函数调用")


if __name__ == '__main__':
    func()

装饰器在第一次调用被装饰函数时进行增强

  • 增强时机? 在第一次调用之前
  • 增强次数?只增强一次

上面代码的调用逻辑分析:

python 复制代码
func = wrapper2(func)
func = wrapper1(func)

func()
相关推荐
LeocenaY2 小时前
搜集的一些测开面试题
开发语言·python
嗝o゚2 小时前
昇腾CANN ge 仓的图优化 Pass:哪些 Pass 真正影响推理性能
pytorch·python·深度学习·cann·ge-pass
深度先生3 小时前
Conda 全面讲解——数据科学家的标配工具
python
深度先生3 小时前
虚拟环境:别让包打架
python
漠效4 小时前
随机代理‌IP访问脚本
开发语言·python
SilentSamsara4 小时前
元类与 __init_subclass__:类是如何被“创建“出来的
开发语言·python·青少年编程
隔壁大炮4 小时前
MNE-Python 第6天学习笔记:分段(Epoching)与基线校正
python·eeg·mne·脑电数据处理
SilentSamsara4 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
水木流年追梦5 小时前
大模型入门-大模型的推理策略
开发语言·python·算法·正则表达式·prompt
Cthy_hy5 小时前
Python 算法竞赛:数学核心知识点全总结
python·算法