Python_基础个人理解_装饰器

 

装饰器

                       ———— 个人理解简述

 

对于装饰器我个人认为直观来讲是对已有的某个函数,

额外添加新功能的有效表现形式。

装饰器可以在不需要改变源代码的前提下给函数额外增加新功能。

装饰器的使用形式也很简单,@函数名

这个@后面跟着的函数为封装了想要添加的功能,

在《Python_基础个人理解_闭包》的章节里我简单的介绍了闭包的特性,

定义形式以及使用方法。

而在闭包的后面紧接着整理装饰器,可想而知两者有着重要的联系。

而装饰器用来修饰已有函数,给已有函数添加新功能,

所以会根据函数的形式发生变化。

如函数有无参数,是否有返回值,都会给装饰器带来改变。

如果在程序开发中给每种函数都定义一个装饰器,开发效率可想而知。

所以便有了万能装饰器。

之所以称之为万能,是因为我们在定义装饰器的时候,

传入了可变参数和关键字参数。

可以用可变参数和关键字参数来接收不同类型参数,

(*args, **kwargs)

那么万能装饰器是如何实现的呢?

我们来看以下图片。

 

 

 

举个栗子:

 

 

如图所示:

    此装饰器的函数定义形式,为闭包的形式,

    在内函数定义形参的时候我们选用了位置参数和关键字参数,

    这样就可以接收外界的各种类型参数了。

    

 

当然,装饰器的形式富有多样性。

常用的还有使用类方法实现装饰器,

也就是__init__ , __call__ 方法。

在__init__初始化方法中接收一个参数,

这个参数就是被装饰的函数引用(函数名)。

 而__call__方法则相当于使用函数的形式实现闭包的内函数。

被类装饰器装饰的函数,引用名直指向类的实例对象。

 

 

当使用对象名加扩航的心事来调用时,使用的事仿函数,

这时才会调用__call__函数。

 

 

具体形式:

 

当然也有多个装饰器同时装饰一个函数的情况,

不过并不多见,个人觉得也不怎么实用。

(其实我是不咋会...)

 

水平一般,能力有限,如有不足,加以改正。

 

 

posted @ 2018-09-13 16:01  善良于。  阅读(91)  评论(0)    收藏  举报