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

【每天学点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.mrgr.cn/news/30758.html

相关文章:

  • SASS 控制指令详解@for、@if、@each、@while
  • 深度学习:tensor的定义与维度
  • 丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn
  • PICO+Unity MR空间网格
  • vscode
  • 云原生周刊:Istio 1.24.0 正式发布
  • MySQL_简介及安装、配置、卸载(超详细)
  • pig4cloud中RequestMatcher的添加
  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • Vue子组件样式受到父组件污染
  • 计算机组成原理之计算机硬件的基本组成
  • 会计稳健性Cscore模型(2000-2022年)
  • 深入探索NumPy
  • 等保测评:企业如何构建安全的网络架构
  • LIN总线CAPL函数—— 设置与测量从节点的波特率(linSetRespBaudrate)
  • 使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
  • 【雪球-注册安全分析报告-无验证方式导致安全隐患】
  • Rust编程的作用域与所有权
  • 易优CMS:打开后台提示“不在特定范围内”(已解答)
  • Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
  • shell运算实战案例-KFC点餐系统
  • 将预设表结构导入MySQL数据库的方法及原理
  • 哲风壁纸js逆向:实战爬取图
  • 《深入了解 Linux 操作系统》
  • c++9月19日
  • Zabbix_5.0 构建企业级监控告警平台----图形监控