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

    文章

    30077

    浏览量

    268346
  • 人工智能
    +关注

    关注

    1791

    文章

    46821

    浏览量

    237464
  • python
    +关注

    关注

    55

    文章

    4779

    浏览量

    84440
收藏 人收藏

    评论

    相关推荐

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

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

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

    想象下,你正在计划周末的户外活动,你可能会问自己几个问题来决定去哪里:"今天天气怎么样?"如果天气晴朗,你可能会选择去公园野餐;如果天气阴沉,你可能会选择去博物馆。这个决策
    的头像 发表于 10-31 14:09 223次阅读
    【<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 166次阅读

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

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

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

    20世纪50年代NLP的早期研究主要基于规则的方法,依赖于语言学专家手工编写的规则和词典。这些规则通常是关于语法、语义和句法结构的人工规则。例如简单的陈述句通常遵循“主语+谓语+宾语”的结构
    的头像 发表于 09-25 16:51 402次阅读
    【<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 643次阅读

    PythonAI中的应用实例

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

    opencv-python和opencv样吗

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

    splitpython中的用法

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

    经常使用的负载开关,您到底了解多少?

    经常使用的负载开关,您到底了解多少?
    的头像 发表于 12-05 17:45 734次阅读
    经常使用的负载开关,您<b class='flag-5'>到底</b><b class='flag-5'>了解</b>多少?

    TVS管与稳压二极管,区别到底在哪里!

    TVS管与稳压二极管,区别到底在哪里!
    的头像 发表于 12-05 14:49 764次阅读
    TVS管与稳压二极管,区别<b class='flag-5'>到底在</b>哪里!

    Python程序不自动关闭的方法

    是使用input函数。我们可以主程序的最后添加input语句,以便等待用户的输入。这样,程序将直等待用户输入,并保持运行状态,直到用户输入内容为止。 # 主程序代码 print
    的头像 发表于 11-29 15:10 5303次阅读

    python软件对电脑配置要求

    Python种流行的编程语言,它在许多不同的领域中被广泛使用,例如网站开发、数据科学和机器学习等。对于使用Python的开发者来说,了解Pyth
    的头像 发表于 11-29 14:58 9746次阅读

    python如何直循环代码

    Python中,有几种方法可以实现代码的循环执行。下面我将详尽、详实、细致地介绍这些方法和它们的使用情况。 使用while循环: Python中,可以使用while循环来重复执行
    的头像 发表于 11-23 15:54 2530次阅读

    python运行次自动再次运行

    使用循环语句是最简单的种实现自动运行功能的方法。Python中,可以使用while循环或for循环来实现。下面是使用while循环
    的头像 发表于 11-23 15:52 1836次阅读