前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记分享 : 装饰器 Decorator 的理解和应用 - 01

笔记分享 : 装饰器 Decorator 的理解和应用 - 01

作者头像
唐国梁Tommy
发布2021-05-28 17:28:07
4830
发布2021-05-28 17:28:07
举报
文章被收录于专栏:唐国梁Tommy唐国梁Tommy

哈喽,大家好,今天我们来学习一下python中的decorator(装饰器)及其应用:

先了解一下装饰器的定义:它是一个函数,它接收另一个函数并扩展后一个函数的行为,而无需显示修改它。

【看这个定义是不是有些不知所措,我一开始也是这样的心情。。。】

在我们深入学习并掌握decorator之前,先来了解一下function(函数)及其应用,这个是我们学习decorator的前提条件。

我这里写一个最简单的函数例子:

在python中,一切皆为对象。函数也可以当做参数传进另一个函数。

举个例子:

继续,我们看一下内置函数,如何定义和使用:

接下来,我们进入主题:Decorator 装饰器,首先,我们看一下简单的decorator :

【解释:tm = my_decorator(tommy) 返回一个wrapper函数,然后再调用,依次输出。】

我们可以用另一种更为简单的方式改写上面的例子:(可以对比一下)

【注意:

① 使用decorator,需要加符号:@

② decorator 的主要作用就是wrap a function, 修改函数的行为

③ 原来调用函数tommy()只输出一句话:‘Hi, Guys. 现在使用decorator后,一下子输出了3句话

如果我们要传入一些参数,那么,需要在decorator中定义 *args和**kwargs,即传入任意个参数。具体看例子:【我改写上一个例子】

我们再来看一下,decorator的返回值,注意:它不是显示的返回值。我们看案例对比的结果:【这一点容易被大家忽视】

解决措施,看下面我修改的代码:

【注意:返回值 “我是Tommy” 已经出现啦,这样就成功了。】

接下来,我们继续探索:

我们查看一下上面案例中函数test()的函数名称,代码如下:【直观判断,名称是:test】

【注意:这里函数test的名称竟然不是test,而是decorator中的名称:wrapper,这是为啥呢?】

其实,这个wrapper本质是也是test,只是看起来怪怪的。还是,将名字统一为好,下面,我继续修改代码,非常简单,只需要添加 @functools.wraps 即可。

如果上面我分享的这些内容,你都懂了,那基本上已经掌握了decorator的内容。

我们继续看个案例:

好啦,今天有关decorator的分享告一段落,明天我将与小伙伴们继续分享学习笔记。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 唐国梁Tommy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档