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
    +关注

    关注

    87

    文章

    30763

    浏览量

    268909
  • 人工智能
    +关注

    关注

    1791

    文章

    47208

    浏览量

    238294
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84634
收藏 人收藏

    评论

    相关推荐

    带你了解工业电脑

    系统。工业领域,机器视觉、工业机器人、人工智能(AI)和深度学习等应用都依赖于强大、可靠的工业电脑,以确保流程平稳高效地运行。本文介绍了工业和商用电脑之间的差异、
    的头像 发表于 12-02 15:12 107次阅读
    <b class='flag-5'>一</b>文<b class='flag-5'>带你</b><b class='flag-5'>了解</b>工业电脑

    每天学点AI】实战图像增强技术人工智能图像处理中的应用

    图像增强(ImageEnhancement)是人工智能和计算机视觉中项重要的技术,也是人工智能数据集预处理的重要步骤。它旨在提高图像的质量,使其视觉上更加清晰、细节更丰富。这项
    的头像 发表于 11-22 17:14 513次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】实战图像增强技术<b class='flag-5'>在</b>人工智能图像处理中的应用

    每天学点AI】前向传播、损失函数、反向传播

    深度学习的领域中,前向传播、反向传播和损失函数是构建和训练神经网络模型的三核心概念。今天,小编将通过简单的实例,解释这三概念,并展
    的头像 发表于 11-15 10:32 626次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】前向传播、损失函数、反向传播

    每天学点AI】KNN算法:简单有效的机器学习分类

    想象下,你正在计划周末的户外活动,你可能会问自己几个问题来决定去哪里:"今天天气怎么样?"如果天气晴朗,你可能会选择去公园野餐;如果天气阴沉,你可能会选择去博物馆。这个决策
    的头像 发表于 10-31 14:09 309次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】KNN算法:简单有效的机器学习分类<b class='flag-5'>器</b>

    Python常用函数大全

    Python 世界里,有些宝藏函数和模块,它们可以让你编程更轻松、代码更高效。这篇文章将带你一一认识这些神器,让你的开发生活瞬间轻松不少!
    的头像 发表于 10-27 17:20 238次阅读

    每天学点AI】人工智能大模型评估标准有哪些?

    OpenAI新模型o1号称编程能力8倍杀GPT-4o,MMLU媲美人类专家,MMLU是什么?评估大模型的标准是什么?相信大家阅读大模型相关文档的时候经常会看到MMLU,BBH,GSM8K,MATH
    的头像 发表于 10-17 16:49 411次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】人工智能大模型评估标准有哪些?

    每天学点AI】五阶段带你了解人工智能大模型发展史!

    20世纪50年代NLP的早期研究主要基于规则的方法,依赖于语言学专家手工编写的规则和词典。这些规则通常是关于语法、语义和句法结构的人工规则。例如简单的陈述句通常遵循“主语+谓语+宾语”的结构
    的头像 发表于 09-25 16:51 471次阅读
    【<b class='flag-5'>每天</b><b class='flag-5'>学点</b><b class='flag-5'>AI</b>】五<b class='flag-5'>个</b>阶段<b class='flag-5'>带你</b><b class='flag-5'>了解</b>人工智能大模型发展史!

    GAP!你对AI大模型到底了解多少?

    谈到 AI 大模型,你最先想到的是什么?很多人首先关心的还是它的商业变现,而非这些技术术语。AI 大模型训练是端到端的复杂系统工程,技术门槛很高,需要强大的算力支撑,尤其是参数量大
    的头像 发表于 09-07 09:40 673次阅读

    VCA810的自动增益控制电路,RSSI port口是用来干嘛的啊?

    我是菜鸟,有比较简单的问题想问大家,希望大家可以解答。 下面这张图是从手册上的,但是有很多地方我不明白。例如下面画红色框部分的电路,这是
    发表于 08-26 06:40

    PythonAI中的应用实例

    Python人工智能(AI)领域的应用极为广泛且深入,从基础的数据处理、模型训练到高级的应用部署,Python都扮演着至关重要的角色。以下将详细探讨
    的头像 发表于 07-19 17:16 1062次阅读

    opencv-python和opencv样吗

    是OpenCV的Python语言接口,它允许开发者使用Python语言来调用OpenCV库的功能。 虽然OpenCV和OpenCV-Python
    的头像 发表于 07-16 10:38 1162次阅读

    缓冲干嘛

    缓冲干嘛的 缓冲种广泛应用于电子、电气、通信、计算机、自动化控制等领域的电子元件。它的作用是电路中起到稳定电压、电流、信号等参数
    的头像 发表于 06-10 16:06 4725次阅读

    OpenHarmony父子组件单项同步使用:@Prop装饰

    @Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明: 从API version 9开始,该装饰支持
    的头像 发表于 02-03 10:57 410次阅读
    OpenHarmony父子组件单项同步使用:@Prop<b class='flag-5'>装饰</b><b class='flag-5'>器</b>

    如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法

    Python爬虫中文乱码问题。 了解字符编码 解决乱码问题之前,我们首先需要了解些基本
    的头像 发表于 01-12 15:11 2350次阅读

    splitpython中的用法

    splitpython中的用法 split()是Python非常常用的字符串函数,它能够根据指定的分隔符将
    的头像 发表于 12-25 15:12 2019次阅读