摘要:前言最近跟着流畅的和学习,看到装饰器部分,有些头大倒不是因为概念难以理解,而是书和网上文章中有些地方有些矛盾之处在简单学习和实践之后,整理出我对装饰器的理解如下装饰器的定义在不同语境下,装饰器有不一样的含义,我大致认为有种定义一种把另一个对
前言
最近跟着《流畅的Python》和《Python Cookbook》学习,看到装饰器部分,有些头大
倒不是因为概念难以理解,而是书和网上文章中有些地方有些矛盾之处
在简单学习和实践之后,整理出我对装饰器的理解如下
在不同语境下,装饰器有不一样的含义,我大致认为有3种定义:
一种把另一个对象当参数的对象
一种语法糖
面对对象设计中的装饰器模式
之所以这里特别指出,是因为在很多文章和书中
把装饰器定义成一个函数,有些更扩展一些,把装饰器定义成一个callable对象
对刚开始学习的读者来说这么解释或许不错,但在使用python的过程中,我们发现装饰器可以是
函数
类 (例: classmethod和property)
实例方法 (例: FLask类的实例app的route方法)
类方法
如果说方法有__call__方法,能符合上面callable对象的定义的话
classmethod类和property类可没__call__方法,所以我认为更准确的定义是我上面总结的前两点
广义上说,更优雅地处理对象,相比taget = decorate(target),@decorate可要优雅多了
狭义上说,各种功能:
禁止函数运行 (刚想到,写个不return原函数的装饰器去装饰某函数,这个函数不就不运行了嘛,不晓得是否有人会这么干)
记录函数的运行状况
缓存计算结果
检查/修改参数
装逼?
其他
装饰器的使用注意点使用多个装饰器时的运行顺序;最外围/上面的装饰器最晚生效;特别当装饰器返回一个和原先不同类型的对象(比如classmethod)时,更要小心
记得用functools中的wraps保留被装饰对象的属性
其他(还没想到)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41033.html
摘要:实现一个简单的装饰器输出被装饰函数的运行时间简单运用运行结果运行过程中,首先输出装饰器函数中的内容被装饰函数运行时间长度函数名称和实际参数计算结果然后得到最终的计算结果。 函数装饰器 函数装饰器用于在源码中标记函数, 以某种方式增强函数的行为,这是一个强大的功能。 函数装饰器是一个可调用对象,其参数是另外一个函数,即被装饰函数。装饰器可能处理被装饰函数,然后将其返回,或者将其替换成另一...
摘要:装饰器介绍中的装饰器的目的是为一个目标函数添加额外的功能却不修改函数本身。装饰器的本身其实是一个特殊的函数。那么有啥更好的解决方式呢装饰器代码像上面这么写,可以较好地解决了上面提到的第一个问题。装饰器语法糖放在函数前面,相当于执行了等。 怎么理解python中的装饰器 一个比喻 知乎上有一个比较形象的比喻 https://www.zhihu.com/questio...:人类穿着内裤很...
摘要:设计模式学习装饰器模式这个在我的笔记中有介绍工厂模式未完成,待更新单例模式保证一个对象最多只有一个实例存在。对安全性要求较高的场景,比如银行的修改余额业务。如果我们不使用单例模式,那么就会创建三个不同的实例。 设计模式学习 1.装饰器模式 这个在我的笔记中有介绍 2.工厂模式 author : liibntime :2018-11-6未完成,待更新 3.单例模式 保证一个对象最多只有一...
摘要:的装饰器可以实现在代码运行期间修改函数的上下文,即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作,而函数本身并没有任何的改变。中的参数,实际上则是传递给实际上是的参数因为装饰器也是个函数,那么装饰器自己的能不能有参数传递呢。 Python的装饰器可以实现在代码运行期间修改函数的上下文, 即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作, 而函数本身并没有任何的改...
阅读 896·2021-11-25 09:43
阅读 1242·2021-11-17 09:33
阅读 2978·2019-08-30 15:44
阅读 3276·2019-08-29 17:16
阅读 451·2019-08-28 18:20
阅读 1544·2019-08-26 13:54
阅读 531·2019-08-26 12:14
阅读 2149·2019-08-26 12:14