简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。 一般而言,我们要想拓展原来函数代码,最直接的办法就是侵入代码里面修改,例如:

这是我们最原始的的一个函数,然后我们试图记录下这个函数执行的总时间,那最简单的做法就是:

但是如果你的Boss在公司里面和你说:“这段代码是我们公司的核心代码,你不能直接去改我们的核心代码。”那该怎么办呢,我们仿照装饰器先自己试着写一下:

这里我们定义了一个函数deco,它的参数是一个函数,然后给这个函数嵌入了计时功能。然后你可以拍着胸脯对老板说,看吧,不用动你原来的代码,我照样拓展了它的函数功能。然后你的老板有对你说:“我们公司核心代码区域有一千万个func()函数,从func01()到func1kw(),按你的方案,想要拓展这一千万个函数功能,就是要执行一千万次deco()函数,这可不行呀,我心疼我的机器。”好了,你终于受够你老板了,准备辞职了,然后你无意间听到了装饰器这个神器,突然发现能满足你的要求了。我们先实现一个最简陋的装饰器,不使用任何语法糖和高级语法,看看装饰器最原始的面貌:

这里的deco函数就是最原始的装饰器,它的参数是一个函数,然后返回值也是一个函数。其中作为参数的这个函数func()就在返回函数wrapper()的内部执行。然后在函数func()前面加上@deco,func()函数就相当于被注入了计时功能,现在只要调用func(),它就已经变身为“新的功能更多”的函数了。

所以这里装饰器就像一个注入符号:有了它,拓展了原来函数的功能既不需要侵入函数内更改代码,也不需要重复执行原函数。

然后你满足了Boss的要求后,Boss又说:“我让你拓展的函数好多可是有参数的呀,有的参数还是个数不定的那种,你的装饰器搞的定不?”然后你嘿嘿一笑,深藏功与名!

最后,你的老板说:“可以的,我这里一个函数需要加入很多功能,一个装饰器怕是搞不定,装饰器能支持多个嘛” 最后你就把这段代码丢给了他:

多个装饰器执行的顺序就是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身。盗用别人的例子:

输出:

python装饰器-Python 装饰器相关推荐

  1. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景

    1. 闭包 在 Python 中,函数也可以作为参数.我们可以执行下面的代码: def func(a, b):return a + bprint(func) 我们直接输出函数名,而没有加括号.输出结果 ...

  2. python重难点之装饰器详解

    背景 虽然之前看过装饰器的相关内容,但是今天想起来,一直没有好好总结一下,所以特地记录下关于装饰器的一系列用法. 要想理解装饰器首先要明确颇python中的三个概念: 1.一切函数皆为对象 2.高阶函 ...

  3. python描述器做权限控制_Python装饰器14-描述器

    描述器 这是Python一个重要的概念,英文名:Descriptor descriptor是对象的一个属性,只不过它存在于类的dict中并且有特殊方法get(可能还有set和__delete)而具有一 ...

  4. python三大神器之装饰器

    装饰器的形成过程 假如你要写一个计算函数执行时间的函数,代码如下: 1 import time 2 3 def func1(): 4 print('in func1') 5 6 def timer(f ...

  5. Python 进阶_闭包 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  6. python装饰器-Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶 ...

  7. python装饰器-Python基础-20装饰器

    20.装饰器 20.1 函数基础知识 在Python中函数为一等公民,我们可以: 把函数赋值给变量 在函数中定义函数 在函数中返回函数 把函数传递给函数 20.1.1 把函数赋值给变量 在Python ...

  8. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

  9. python三层装饰器-python三大神器===》装饰器

    1.认识装饰器 如果你经常看我的博客,你已经学会了python的前两大"神器'(迭代器,生成器),那么什么是装饰器呢?就如字面意义装饰器是对某个事物(通常指函数)进行装饰,让其在不修改任何内 ...

  10. python装饰器-Python @函数装饰器及用法(超级详细)

    前面章节中,我们已经讲解了 Python 内置的 3 种函数装饰器,分别是 @staticmethod.@classmethod 和 @property,其中 staticmethod().class ...

最新文章

  1. 【Java Web开发学习】Spring4条件化的bean
  2. viewpage 去掉左右切换效果_ViewPager实现多页面切换以及动画效果
  3. 玩cf一直连接服务器失败怎么办啊,windows10系统玩cf提示连接服务器失败怎么办...
  4. [No000048]程序员的成长过程中,有哪些阶段?
  5. 如何让盒子实现水平和垂直居中
  6. Spring学习路线
  7. 双目测距算法matlab模拟,基于BM算法的双目测距.pdf
  8. [ubuntu] 安装五笔输入法
  9. 面向中国企业关系抽取的双向门控递归单元神经网络
  10. Java_深度剖析ConcurrentHashMap
  11. 服务器在线监控,EasyNmon
  12. uuuuuuuuuu
  13. 周鸿祎的互联网方法论:用户至上与颠覆式创新
  14. 【Java面试题】之内存泄漏
  15. android女孩名字的由来,诗经中的女孩灵动名字 寓意深刻而又唯美
  16. 更改图像长宽 厘米为单位
  17. 2022-12-01
  18. STM32CubeMX——LED定时闪烁和输出PWM波
  19. 如何做好电商运营?倍赞网:这十个步骤必须懂
  20. 百问网物联网实战-串口设计

热门文章

  1. _ISD-SMG518L2CT-F 海康威视测温人脸安检门 温度精度±0.5℃ 人脸抓拍金属探测
  2. Resources$NotFoundException Resource is not a Drawable (color or path) 问题解决
  3. vim中执行shell命令小结
  4. 集群节点Elasticsearch升级
  5. 【面试】2018大厂高级前端面试题汇总
  6. 【BIEE】BI Publisher下拉菜单设置
  7. 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计...
  8. 来自codeblock 贴吧
  9. codeforces 501 C,D,E
  10. HTTP Error 503. The service is unavailable.