【每天学点AI】一个例子带你了解Python装饰器到底在干嘛!

news2024/9/20 10:01:12

今天我们来聊聊一种能给你的代码变得“加料”的神器——Python装饰器

就像一杯咖啡,原本它是苦的,为了让它符合我的口味,我给它添加了糖,添加之后就完美的符合了我的口味。

那么,装饰器又是如何给代码进行“加料”呢?

Python装饰器提供了一个更为优雅的方式来增强现有函数的行为,并且不需要修改现有的函数代码及调用方式。

接下来通过一个案例来介绍一下装饰器的原理和实际的行为。

这里有一个函数,他就像一个勤劳的快递员,每次运行都送一次快递。

现在我们想知道它每次送快递需要多长时间,这时候装饰器就派上用场了,我们可以使用装饰器来给它添加计时的功能。

这是使用语法糖给函数添加装饰器的用法。

下面的部分称为原函数,上面的部分称装饰器函数,此时去调用原函数时,它除了会执行原本的功能外,还会执行装饰器给它添加的计时的功能。

这是装饰器最常见的写法,但它是怎么给函数增加新功能的呢?我们来看去除掉语法糖后装饰器的本来面目。

如果不使用语法糖,它本质上就是装饰器函数的一次调用,特殊的是它会将原函数作为参数传递给装饰器函数。而在装饰器函数中,它接收一个函数作为参数,并且在它的内部定义了一个新的函数,最后将新函数进行返回。在这里我们称timer decorator为外函数,称wrapper为内函数,而这个func就是原函数。

外函数将内函数名称进行返回并赋值为原函数的函数名,下面在调用原函数的函数名时,实际上调用的是内函数。

内函数被执行后,首先会记录当前时间,然后调用func,func是什么?是外函数的形参,这里可能有人会疑惑,外函数已经执行完了,为什么func还会存在呢?

这其实就是装饰器函数的立身之本:内函数所使用的外函数数据不会随着外函数的调用而销毁,所以此时func就指向了原函数,在调用内函数时,这里的func()可以去执行原函数,接着记录一下时间,最后通过差值得到执行函数所需要的时间。至此,通过装饰器我们不仅为原函数添加了新的功能,并且还没有修改其调用方式。

而语法糖的存在就是为了省略这一行代码,由此就形成了我们常见的装饰器了。

点击观看完整视频

一个例子带你了解Python装饰器到底在干嘛!!Python装饰器原理及作用详解来咯~_哔哩哔哩_bilibili一个例子带你了解Python装饰器到底在干嘛!!Python装饰器原理及作用详解来咯~, 视频播放量 215、弹幕量 0、点赞数 6、投硬币枚数 8、收藏人数 6、转发人数 0, 视频作者 小元实验室, 作者简介 人工智能、嵌入式 、物联网,核心知识梳理与总结,付费知识大放送, 少走99%弯路,就是最好的捷径!,相关视频:RFID在生活中无处不在,RFID技术的应用领域及工作原理是什么?一条视频告诉你~~,重发爆赞!李永乐老师深度讲解AI!带你了解电脑如何像人一样思考,带你学习AI前沿技术/人工智能/机器学习/深度学习/神经网络/计算机技术,草履虫都能学会!这可能是B站最全的(Python+机器学习+深度学习)系列课程了,入门巨简单学不会你打我!机器学习/深度学习/人工智能/python学习,【Python游戏】教你用20行Python代码,制作一个马里奥游戏,好玩到停不下来!!,什么是复位电路?外部复位和内部复位有什么区别,了解复位电路的基本介绍和工作原理5分钟就够了!,Python零基础入门到精通(2024最新版),【强推】这可能是B站最全的(Python+机器学习+深度学习)系列课程了!从入门到精通,通俗易懂,草履虫都能学会!(人工智能/机器学习/深度学习/python),在家用Python接单,昨天680,分享我的接单平台、接单技巧以及学习资源!!!,【全549集】这绝对是B站最全最细的零基础python全套教程,清华大佬专为零基础小白研制,7天学完即可进阶至大神!存下吧,很难找全了!,【附源码】Python自动答题脚本,100%正确率,期末考试再也不用担心挂科了!大学生考试神器,Python基础教程,代码爬虫,自动化办公icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1fGHDepExY?t=1.2

人工智能体系课程:AI全栈工程师实战课

https://www.yyzlab.com.cn/package/info/1749620286278397953?code=66

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 elasticsearch安装

【0】官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/7.11/targz.html 【1】Centos7 下载安装 【1.1】下载 官网:Download Elasticsearch | Elastic 选择好自己想要的相关版本即可; 【2】Centos7.X 前置环境配置(uli…

Request 跨线程访问问题

优质博文:IT-BLOG-CN 此篇文章是基于 Tomcat Request Cookie 丢失问题 文章的一个延续 一、Request 跨线程访问问题 问题代码摘要 为了方便选择发起get请求,然后只需要传递一个参数就行,核心步骤是要把request传递到异步线程里面去&#xf…

ssm自助购药小程序 LW PPT源码调试讲解

第二章开发技术介绍 此系统的关键技术和架构,Java技术、B/S结构、Ssm框架和Mysql数据库,是本系统的关键开发技术,对系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。 2.1 系统开发平台 在线自助购药小程…

Linux入门攻坚——33、Mini Linux制作-2

前面是通过自定义内核配置制作的一个非常精简的Linux,这个Linux只能执行已经移植的有限的几个命令程序,为了使其具有更多功能,且控制其大小,使用kernel busybox。 busybox模拟实现了linux的各种命令程序。BusyBox 是一个集成了三…

【WPF】01 微软官方介绍开篇

这篇引入微软的首页介绍,比较全面,用于个人学习查看的内容,方便查找,后续将根据实战情况,逐步积累应用到的方法实现的效果等。 WPF 介绍 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生…

微型丝杆加工的基本环境要求

微型丝杆是现代工业中常见的传动装置,广泛应用于各种机械设备和自动化系统中。而在潮湿、腐蚀性气体或高温等特殊环境下,微型丝杆需要具备特殊的环境适应性和防腐性能,以确保其长期稳定可靠地工作。那么微型丝杆的加工对环境有什么要求呢&…

IDEA中其他操作

删除类文件 点击想要删除的类-鼠标右键-Delete即可删除。需要注意的是如果该类中有代码引用了其他相关代码的话,需要先删除其他相关代码才能删除该类。 修改类名称 点击选中类-鼠标右键-Refactor-Rename 修改模块名 与修改类名称是一样的操作,只是在…

物流系统打单软件 佳易王物流运单怎么打印教程

一、前言 物流系统打单软件 佳易王物流运单怎么打印教程 1、佳易王物流管理系统可同时打印物流单和标签 2、如果一台电脑上有多台打印机,软件可以设置物流或标签对应的打印机,系统自动识别打印机。 二、软件程序图文说明 1、上图为 物流单在空白单上打…

JS在线加密解密工具

快捷工具网得JS加密解密工具为您提供JS加密解密,js加解密工具,JS在线加解密,JS代码在线加解密,该工具基于eval方法的加密与解密功能,用户可将js代码加密成eval方法执行形式的代码,也可将eval方法加密过的代码进行解密操作。是一款非常简便实用的在线Java…

身份证实名认证的应用场景-身份证识别api

引言 在互联网时代,虚拟身份和真实身份的界限逐渐模糊。为了保证线上平台的安全性和可信度,身份证实名认证逐渐成为必不可少的验证方式。它通过身份信息的核验,确保用户是真实的个人,防止虚假身份带来的各类风险。本文将探讨身份证…

使用vite+react+ts+Ant Design开发后台管理项目(一)

前言 本文将引导开发者从零基础开始,运用、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工…

Zabbix 部署----安装Zabbix(业务主机)

目录 1、另外准备一台虚拟机(192.xx.xx.20) 设置主机名 关闭防火墙、selinux 准备zabbix-repo 安装zabbix-agent 配置主服务器地址 启动zabbix-agent:10050 1、另外准备一台虚拟机(192.xx.xx.20) 设置主机名 hostname web1 关闭防火墙、selinux syst…

RS®AREG100A 汽车电子雷达回波发生器

AREG100A 汽车电子雷达回波发生器 轻松进行可靠的汽车电子雷达传感器生产测试 综述 R&SAREG100A 汽车电子雷达回波发生器是一款强大的智能解决方案,可用于生产过程中的汽车电子雷达传感器测试。借助 R&SAREG100A,生产工程师可获得多种优势&am…

二、编译原理-词法分析

一、词法分析器的作用 1、词法分析器的作用 读入字符流,组成词素,输出词法单元序列 过滤空白、换行、制表符、注释等 将词素添加到符号表中,以便编译的各个阶段取用 2、词法单元、模式、词素 (1)词法单元 (token…

Halcon OCR检测 免训练版

一.前言: 目前新版的Halcon已经具备了DeepOcr的功能可以涵盖大部分的识别场景,缺点是有些特殊的应用场景依然需要大量的图片训练,而且Halcon22之前的版本DeepOCR是不支持训练的,我们都知道传统的OCR项目是通过Blob分析&#xff0…

Linux中的进程入门

冯诺依曼体系结构 操作系统(Operator System) 进程控制块(PCB) struct task_struct{//该进程的所有属性//该进程对应的代码和属性地址struct task_struct* next; }; struct task_struct 内核结构体——>创建内核结构体对象(task_struct)…

【vue element-ui】表单连锁验证,el-form validate函数失效问题

实现效果:连锁表单验证,在LED版本号选择为升级版LED时候,标题名称不超过8 实现代码: <el-form:model="configuration"ref="form":rules="rule"size="small"label-width="130px"v-if="isture == 1"><…

Docker笔记-Docker Dockerfile

Docker笔记-Docker Dockerfile Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 这里讲解如何运行 Dockerfile 文件来定制一个镜像。 DockerFile构建过程解析&#xff1a; 1、每条保留字指令都必须为大写字母且后面要…

基于SpringBoot的图书进销存管理系统【附源码】

基于SpringBoot的图书进销存管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 图书类型管理 5.3 商品…

【雪球-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…