专栏首页唐国梁Tommy笔记分享 : 装饰器 Decorator 的理解和应用 - 01

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

哈喽,大家好,今天我们来学习一下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的分享告一段落,明天我将与小伙伴们继续分享学习笔记。

本文分享自微信公众号 - 唐国梁Tommy(TangGuoLiangAI),作者:唐国梁Tommy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用 Decorator 装饰你的 Typescript?

    正在着手写 THE LAST TIME 系列的 Typescript 篇,而Decorator 一直是我个人看来一个非常不错的切面方案。所谓的切面方案就是我们常...

    Nealyang
  • 深入理解 Python 中的装饰器

    装饰器本质上也是函数,接受函数对象来作为参数,并在装饰器的内部来调用接受的函数对象完成相关的函数调用。也可以这样理解,为了方便在几个不同函数调用之前或者之后完成...

    测试小兵
  • 用装饰器封装Flask-WTF表单验证逻辑

    对于有很多提交接口的项目来说,需要在每个路由下写相同的的逻辑,造成了大量的代码重复。在Flask-Login中,要把一个路由设置为登录后才能访问,只需要在路由上...

    simpleapples
  • 如何在 React 中使用装饰器-即@修饰符

    装饰器 decorator 是一种函数,是 Es6 的一个语法糖,是一种与类(class)相关的语法,用来注释或修改类和方法

    itclanCoder
  • 为什么在Python代码中装饰器很重要

    要理解什么是装饰器,您首先需要熟悉Python处理函数的方式。从它的观点来看,函数和对象没有什么不同。它们有属性,可以重新分配:

    HuangWeiAI
  • Python装饰器入门教程 | 新手教程

    昨天简单聊了下Flask的学习感想,然后分享了一些Flask的学习方式与视频。其中提到在学习Python Web前,请先将python基础及装饰器等知识有一个了...

    马哥Python
  • 设计模式之结构型模式

    动态代理与静态代理的比较 抽象角色中(接口)声明的所以方法都被转移到调用处理器一个集中的方法中处理 , 我们可以更加灵活和统一的处理众多的方法。

    时间静止不是简史
  • 设计模式| 结构型模式

    其他同系列的文章还有: 面向对象编程中的六大原则 设计模式| 创建型模式 设计模式| 结构型模式 设计模式| 行为型模式 (上) 设计模式| 行为型模...

    進无尽
  • 『设计模式』小伙你的穿搭很潮!--装饰者模式

    装饰模式(Decorator):又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式常常被称为包裹模式,就是因为每一...

    风骨散人Chiam
  • 设计之禅——装饰者模式详解(与代理模式的区别以及与其他模式的组合)

    相信很多初学者都对JavaAPI中的IO包感到头大,其中的类非常多,看着看着就晕了,笔者也是一样。不过,若是了解了装饰者模式那再看IO包的设计就很清晰明了了。

    夜勿语
  • [设计模式] 装饰者模式

    通过继承自同一父类,来实现给某一个类动态的添加新的职责,原理是每一个装饰者持有被装饰者的实例,并可以用自身替代他.

    呼延十
  • 了解Python装饰器

    一 装饰器是什么 装饰器是一个用于封装函数或者类的代码工具,显式地将封装器作用于函数或者类上,达到程序运行时动态增加功能的目的。对于函数运行前处理常见前置条件...

    用户1278550
  • Python 工匠:使用装饰器的技巧

    01 前言 装饰器(Decorator) 是 Python 里的一种特殊工具,它为我们提供了一种在函数外部修改函数的灵活能力。它有点像一顶画着独一无二 @ 符...

    腾讯NEXT学位
  • 一文读懂@Decorator装饰器——理解VS Code源码的基础(上)

    ? 导语 | 本人在读VS Code源码的时候,发现其用了大量的@Decorator装饰器语法,由于对装饰器的语法比较陌生,它成为了我理解VS Code的拦路...

    腾小云
  • PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    本文实例讲述了PHP设计模式:装饰器模式Decorator。分享给大家供大家参考,具体如下:

    砸漏
  • Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案

    装饰器(Decorator)是 Python 非常实用的一个语法糖功能。装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”。其目的是在不对现有函数进...

    霍格沃兹测试开发
  • python之我对装饰器的理解

      从一开始学习python的时候,就一直不是很理解装饰器是个什么东东,再看了很多篇博文和自己动手敲了好多代码后,算是略有了解。

    py3study
  • 用最简单的例子说明设计模式(一)之单例模式、工厂模式、装饰模式、外观模式

    六月的雨
  • Vue.js属性装饰器库vue-property-decorator文档

    此库完全依赖于vue-class-component, 所以请使用此库前, 先阅读它的文档

    治电小白菜

扫码关注云+社区

领取腾讯云代金券