当前位置: 首页 > article >正文

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

今天我们来聊聊一种能给你的代码变得“加料”的神器——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.kler.cn/news/311677.html

相关文章:

  • C语言中的一些小知识(二)
  • Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
  • 算法题总结(三)——滑动窗口
  • MySql的基础讲解
  • Fisco Bcos 2.11.0配置console控制台2.10.0及部署调用智能合约
  • SpringAI-基于java大模型的胡言乱语
  • 正则表达式获取某些字段
  • docker快速搭建kafka
  • 【C++ Primer Plus习题】16.9
  • ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块应用领域
  • 数据结构---二叉树例题讲解
  • 基于深度学习的手势识别算法(论文复现)
  • Vue使用组件需要加前缀而React使用组件库的区别
  • 单片机毕业设计基于单片机寻迹巡线避障智能小车系统设计
  • .NET 一直跻身 30 大Github最活跃开源项目之列。
  • JDK自带的序列化
  • sqli-labs靶场搭建
  • 鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3566移植案例
  • Datawhile 组队学习Tiny-universe Task01
  • 数据结构-2.8.单链表的建立
  • 【Spring】IocDI详解(6)
  • VMWare17.5.2中Windows7企业版安装VMWareTools失败及解决办法
  • stm32单片机个人学习笔记3(GPIO输出)
  • Python 正则表达式详解:从基础匹配到高级应用
  • 华为OD机试 - 构成指定长度字符串的个数(Python/JS/C/C++ 2024 E卷 100分)
  • <<编码>> 第 14 章 反馈与触发器(7)--分频器与计数器 示例电路
  • 提升工作效率,引领编程新时代
  • 【大模型开发】 迎接AI新时代:Qwen2.5发布,超越LLaMA3!本地私有化部署:如何通过一键API调用不同模型?(附源码地址)
  • 速盾:cdn一般多长时间清理下缓存?
  • 基于Ubuntu22.04的cups安装与配置