Python_基础个人理解_装饰器
装饰器
———— 个人理解简述
对于装饰器我个人认为直观来讲是对已有的某个函数,
额外添加新功能的有效表现形式。
装饰器可以在不需要改变源代码的前提下给函数额外增加新功能。
装饰器的使用形式也很简单,@函数名
这个@后面跟着的函数为封装了想要添加的功能,
在《Python_基础个人理解_闭包》的章节里我简单的介绍了闭包的特性,
定义形式以及使用方法。
而在闭包的后面紧接着整理装饰器,可想而知两者有着重要的联系。
而装饰器用来修饰已有函数,给已有函数添加新功能,
所以会根据函数的形式发生变化。
如函数有无参数,是否有返回值,都会给装饰器带来改变。
如果在程序开发中给每种函数都定义一个装饰器,开发效率可想而知。
所以便有了万能装饰器。
之所以称之为万能,是因为我们在定义装饰器的时候,
传入了可变参数和关键字参数。
可以用可变参数和关键字参数来接收不同类型参数,
(*args, **kwargs)
那么万能装饰器是如何实现的呢?
我们来看以下图片。
举个栗子:

如图所示:
此装饰器的函数定义形式,为闭包的形式,
在内函数定义形参的时候我们选用了位置参数和关键字参数,
这样就可以接收外界的各种类型参数了。
当然,装饰器的形式富有多样性。
常用的还有使用类方法实现装饰器,
也就是__init__ , __call__ 方法。
在__init__初始化方法中接收一个参数,
这个参数就是被装饰的函数引用(函数名)。
而__call__方法则相当于使用函数的形式实现闭包的内函数。
被类装饰器装饰的函数,引用名直指向类的实例对象。
当使用对象名加扩航的心事来调用时,使用的事仿函数,
这时才会调用__call__函数。
具体形式:

当然也有多个装饰器同时装饰一个函数的情况,
不过并不多见,个人觉得也不怎么实用。
(其实我是不咋会...)
水平一般,能力有限,如有不足,加以改正。
浙公网安备 33010602011771号