python装饰器原理

2023-11-03

装饰器作用
装饰器在实际开发中应用广发,如:
1.引入日志
2.函数执行时间统计
3.执行函数前预备处理
4.执行函数后清理功能
5.权限校验等场景
6.缓存

装饰器可以实现在不修改之前已经写好并且封装好的代码的前提下对之前的代码进行功能上的拓展!在实际开发中应用十分广泛,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python.下面让我们来看下代码.

装饰器原理代码如下


def decotate(func):
    """装饰器实现给函数f1 f2 增加验证共功能 func 即 f1函数 f2 函数的引用"""
    def inner(*args, **kwargs):
        """用不定长参数来接收任意个数的参数"""
        print("正在验证")
        ret = func(*args, **kwargs)
        print("验证成功")
        return ret

    return inner

#@decotate  等价于  f1 = decotate(f1)
def f1():
    print("账号:qweqweqwe")

#@decotate  等价于  f2 = decotate(f2)
def f2():

    print("密码:sadasddas")

# 这里改变f1 的指向  注意:这里的f1 已经不是之前的f1
f1 = decotate(f1)
f2 = decotate(f2)

f1()
f2()

以上代码就是装饰器的基本实现原理,我们通过装饰器对已经封装好的 f1 f2 方法进行扩展,添加验证功能,装饰器的原理实际就是将之前的函数进行重写的过程.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python装饰器原理 的相关文章

随机推荐

  • 【一文搞定Svelte】超详细的Svelte保姆级上手教程!

    目录 Svelte框架是什么 Svelte使用 一 项目搭建 1 SvelteKit搭建 2 Vite搭建 二 svelte组件 1 组件构成 2 组件引用 三 语法 1 包裹js表达式 2 on 事件绑定 3 响应 4 逻辑块 5 组件属
  • js - 关于部分浏览器内置函数console详解(用开发调试的利器)

    原文地址 http blog csdn net icewizardry article details 17265195 Firebug是网页开发的利器 能够极大地提升工作效率 但是 它不太容易上手 我曾经翻译过一篇 Firebug入门指南
  • 云服务器ubuntu修改密码,云服务器ubuntu修改密码

    云服务器ubuntu修改密码 内容精选 换一换 当云服务器密码即将过期 密码泄露或首次登录时 首次登录云服务器建议您修改初始密码 您可以参考本节操作在操作系统内部修改云服务器密码 优先推荐您参考在控制台重置云服务器密码 在控制台重置实例的登
  • nvm安装注意事项

    目录 1 下载地址 2 设置淘宝镜像 3 附录 1 下载地址 Releases coreybutler nvm windows GitHub 尽量下载最新版本的nvm 以免出现升级高版本node时 npm无法使用的情况 2 设置淘宝镜像 在
  • linux僵尸进程

    什么是僵尸进程 Zombie Process 僵尸进程是指一个已经终止 但是其父进程尚未对其进行善后处理获取终止进程的有关信息的进程 这个进程被称为 僵尸进程 zombie 怎样产生僵尸进程 一个进程在调用exit命令结束自己的生命的时候
  • XSS漏洞的与标签的那些个事~

    XSS漏洞的与标签的那些个事 0x00 div 0x01 textarea 0x02 input 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0
  • 使用随机森林进行特征选择

    绘制随机森林每棵树的决策边界 首先导入必要的库函数 from sklearn ensemble import RandomForestClassifier from sklearn datasets import make moons fr
  • 简易职工管理系统

    简易职工管理系统 问题描述 设计思路 代码部分 总结 样例 问题描述 1 问题描述 对单位的职工进行管理 包括插入 删除 查找 排序等功能 2 要求 职工对象包括姓名 性别 出生年月 工作年月 学历 职务 住址 电话等信息 1 新增一名职工
  • java 反转链表、合并链表

    第一个问题 反转链表 1 题目描述 输入一个链表 反转链表后 输出新链表的表头 2 解题思路 定义三个指针 第一个指针指向当前正在处理的节点 第二个指针指向当前处理节点的下一个节点 该指针是为了保证正常的遍历完顺序链表的所有节点 第三个指针
  • SQLServer创建用户登录

    创建用户登录注意事项 密码是区分大小写的 只有创建SQL Server登录时 才支持对密码预先进行哈希运算 如果指定MUST CHANGE 则CHECK EXPIRATION和 CHECK POLICY必须设置为 ON 否则 该语句将失败
  • 硬件问题总结

    STM32最小系统 F103 1 STM32最小系统 1 1 供电 3 3V 通常使用ASM1117进行5V转3 3V 注意 给单片机供电时要加0 1uf滤波电容 电容要尽可能靠近单片机 1 2外部晶振电路 一般使用外部8M晶振来作为STM
  • C++访问类中私有成员变量的方法

    原则上 C 类中私有变量不允许在类之外的其他任何地方访问 一般来说功能完善的类都会提供get set方法来操作类属性值 还有就是就是通过友元访问 但是 但如果没有get set方法都没有提供 也没有定义友元 比如使用的是第三方提供的 o 或
  • 华为OD机试(B卷)

    华为OD机试 B卷 有幸接到了华为OD的机试邀请 三道算法题 比较幸运的是 最后一题 也相对来说不算太难 没有抽到动态规划 还是花了大约90分钟 三道题都通过了 最终拿到了满分 第一题第二题都相对来说比较基础 由于平时也没有刷题的习惯 用自
  • Using MySQL Enterprise Backup Tools

    本文主要介绍MySQL Enterprise Backup的安装以及使用 1 安装 从官方网站下载MySQL Enterprise Backup安装包 推荐下载rpm软件包 root mydb01 rpm qpl meb 4 1 1 el7
  • Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL

    解决方案 url前面一定要加http
  • Python版的BS期权定价模型和希腊值分析

    我比较懒 主要是打理自己的github的更新 是关于量化投资 机器学习策略相关的项目 https github com Neural Finance 这次更新一个我在学习期权定价过程中 Black Scholes Model 和相关的希腊值
  • webpack 中压缩代码

    阅读 深入浅出的webpack 压缩代码 一 为什么要压缩代码 浏览器通过服务器访问网页时获取的JavaScript CSS资源都是文本形式的 文件越大 网页加载的时间越长 对这些资源进行压缩 1 可以提升网页加载速度和减少网络传输流量 2
  • Java基础知识查阅表(四)[线程、网络编程、注解、java8新特性]

    文章目录 Java中的线程 线程的分类 线程调度规则 获取线程的优先级 其他几个方法 线程的通信 守护线程 线程的生命周期 线程安全问题 线程安全的类 ReentrantLock加锁 关于锁的面试题 定时器Timer Java网络编程 两个
  • 数据结构—顺序表基本操作(c语言代码)

    顺序表 计算机内部存储一张线性表是用一组连续地址内存单元 这种存储结构即为顺序存储结构 这种结构下的线性表叫顺序表 顺序表有两种定义方法 1 静态定义 2 动态生成 顺序表是最简单的一种线性存储结构 优点 构造简单 操作方便 通过顺序表的首
  • python装饰器原理

    装饰器作用 装饰器在实际开发中应用广发 如 1 引入日志 2 函数执行时间统计 3 执行函数前预备处理 4 执行函数后清理功能 5 权限校验等场景 6 缓存 装饰器可以实现在不修改之前已经写好并且封装好的代码的前提下对之前的代码进行功能上的