0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

华清远见工控 2024-09-20 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

wKgaombtOEaAGfC5AAAT2kZ9brI20.jpeg

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

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

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

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

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

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

wKgZombtOEaANYQJAAI8Tn6EY6E351.png

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

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

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

wKgaombtOEaAIlraAAH6JFu33BI380.png

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

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

wKgZombtOEaAffBSAAJ6ik9mlK4531.png

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

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

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

完整视频链接:

https://www.bilibili.com/video/BV1fGHDepExY?t=1.2

wKgZombtOEaAXSlfAAKZ3-dCif803.jpeg


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38090

    浏览量

    296458
  • 人工智能
    +关注

    关注

    1813

    文章

    49734

    浏览量

    261457
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89563
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Stack栈到底用来干嘛的呢?

    Stack_Size就是栈大小,0x00000400就是代表有1K(0x400/1024)的大小。 那这个栈到底用来干嘛的呢? 比如说我们函数的形参、以及函数里定义的局部变量就是存储栈里,所以
    发表于 12-01 08:04

    模数转换(ADC)到底在干嘛

    模数转换种用于将模拟信号(如光敏电阻或热敏电阻的输出)转换为可由数字计算机或微控制处理的二进制信号的设备。将模拟信号转换为二进制数字信号有多种方法,但在本教程中我们将讨论逐次逼近法,因为这可
    的头像 发表于 11-24 19:05 991次阅读
    模数转换<b class='flag-5'>器</b>(ADC)<b class='flag-5'>到底在</b><b class='flag-5'>干嘛</b>?

    了解Mojo编程语言

    Mojo 是种由 Modular AI 公司开发的编程语言,旨在将 Python 的易用性与 C 语言的高性能相结合,特别适合人工智能(AI)、高性能计算(HPC)和系统级编程场景。
    发表于 11-07 05:59

    科技云报到:AI变革需要‘减脂增肌’

    产业的锚点到底在哪里?
    的头像 发表于 09-25 09:20 340次阅读
    科技云报到:<b class='flag-5'>AI</b>变革需要‘减脂增肌’

    智能体化AI和生成式AI的区别

    步骤,甚至没有明确指令时主动行动。举个例子:生成式 AI 可能会帮你生成“本周出差清单”,而智能体化
    的头像 发表于 08-25 17:24 1204次阅读

    充电桩为什么离不开电流传感?篇文章带你了解清楚!

    随着新能源汽车越来越普及,充电桩的需求也快速增长。不管你是充电桩设备厂商,还是做运维的,或者是关注新能源行业的从业者,相信你定听说过“小而关键”的器件——电流传感
    的头像 发表于 08-07 10:23 4910次阅读
    充电桩为什么离不开电流传感<b class='flag-5'>器</b>?<b class='flag-5'>一</b>篇文章<b class='flag-5'>带你</b><b class='flag-5'>了解</b>清楚!

    任正非说 AI已经确定是第四次工业革命 那么如何从容地加入进来呢?

    的基本理论。了解监督学习、无监督学习和强化学习的基本原理。例如,监督学习中,理解如何通过标注数据来训练模型进行分类或回归任务,像通过大量的猫和狗的图片标注数据来训练图像分类模型,
    发表于 07-08 17:44

    带你了解电源测试系统的功能!

    在当今电子与电力技术飞速发展的时代,各类电子设备、电力系统以及新能源相关产品的研发、生产和维护过程中,电源测试系统扮演着至关重要的角色。本文将带你了解源仪电子的电源测试系统的功能。
    的头像 发表于 07-02 09:10 614次阅读
    <b class='flag-5'>一</b>文<b class='flag-5'>带你</b><b class='flag-5'>了解</b>电源测试系统的功能!

    目前Mirco Python sdk触摸到底支持什么驱动啊 ?

    目前的Mirco Python sdk触摸到底支持什么驱动啊 能不能有资料详细说明 GT911 触摸驱动是否支持啊
    发表于 06-24 07:02

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(
    的头像 发表于 06-20 20:00 778次阅读
    漫画科普 | 功率放大器<b class='flag-5'>到底</b>有哪些应用?<b class='flag-5'>带你</b>解锁功放经典应用场景!(<b class='flag-5'>一</b>)

    如何使用 miniProg4 作为 USB-I2C 转换

    我想用 miniProg4 作为 USB-I2C 转换。 但是我找不到个例子(最好是 Python 中)。 有人能引导我找到正确的资源
    发表于 05-28 07:56

    【「零基础开发AI Agent」阅读体验】+读《零基础开发AI Agent》掌握扣子平台开发智能体方法

    /, 在上面注册账号,并由快速开始进入开发操作空间,建立开发AI Agent的各开发要素进行定义,从而完成AI Agent的开发过程。 本书的多
    发表于 05-14 19:51

    每天学点AI】实战仿射变换人工智能图像处理中的应用

    01引言想象下,当你拿起手机拍摄张风景照时,由于角度或设备本身的限制,照片可能会有点歪斜或者变形。这时候,你是否希望有种方法可以简单地“拉直”这张照片,让它看起来更加完美?或者,
    的头像 发表于 02-07 16:06 1108次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】实战仿射变换<b class='flag-5'>在</b>人工智能图像处理中的应用

    Arm带你了解2025年及未来不同技术市场的关键技术方向

    Arm 对未来技术的发展方向及可能出现的趋势有着广泛而深刻的洞察。在上周的文章中,我们预测了 AI 和芯片设计方面的未来趋势,本期将带你深入了解 2025 年及未来不同技术市场的关键
    的头像 发表于 01-24 16:14 1859次阅读

    TimSort:标准函数库中广泛使用的排序算法

    排序算法呢? 本文将带你走进 TimSort,标准函数库中广泛使用的排序算法。 这个算法由工程师 Tim Peters 于 2001 年专为
    的头像 发表于 01-03 11:42 951次阅读