Closure & Decorators(闭包和装饰器)

close

Closure & Decorators

  **Closure & Decorators(闭包和装饰器)**:是Python中非常重要的组成部分,其实它们是属于函数的内容,有关函数的内容,可以参考我的另一篇博客Function(函数),但是装饰器实在是太高级,太重要了,为了让小伙伴们能够轻松的找到,因此我单独写一篇博客谈一谈什么是闭包和装饰器。

闭包

Closure(闭包):指在一个函数体的内部定义另一个函数,并且将这个函数的引用返回,使用该函数时的使用方式和普通函数相同,里面定义的函数称之为闭包。闭包函数总是可以访问其所在的外部函数中声明的参数和变量
closure

闭包实现求y=kx+b和函数实现y=kx+b的区别,从下图可以看出,使用闭包时,调用时给k和b赋值,这样以后只需要对x赋值即可,而使用函数,每次调用都需要对k,b,x同时赋值。
closure

装饰器

**Decorators(装饰器):实质上就是一个闭包,把一个函数作为参数,返回一个替代版本的函数,其本质就是一个返回函数的函数,可以在原函数之前或者之后增加内容。装饰器等价于函数名=闭包函数(函数名)**。
Decorators

通用装饰器是一种重要的装饰器,因为被装饰的函数可能需要输入参数和返回值,而且可能不同的函数需要不同个数不同种类的输入参数和返回值,因此一般情况下我们不在装饰器函数中将其写死,这里直接提供一种通用的装饰器形式

1
2
3
4
def func(functionName):
def func_in(*args, **kwargs):
ret = functionName(*args, **kwargs)
return ret

多个装饰器共同装饰某个函数时,按照从下到上的顺序层层装饰,调用时按照从上到下的顺序层层解装饰。而且我们可以发现,在装饰函数时装饰器函数中的内容已经被执行,即执行到@d2时,d2函数中的print已经被执行,而warpped函数和say函数没有被执行。
Decorators

装饰器也可以具有参数,可以在内部根据其参数选择不同的装饰方式,这要涉及到多重函数闭包。
Decorators

类当作装饰器,需要重写$\underline{}\underline{}init \underline{}\underline{}$方法和$\underline{}\underline{}call\underline{} \underline{}$方法,**@类名时会执行构造函数中的内容,调用函数时会执行call函数中的内容**。
Decorators

小结

  关于闭包和装饰器,在某些特殊的场合,或者多人集成开发时会有使用,有时看别人的代码时会遇到装饰器,为了方便小伙伴们更快速的看懂别人写的代码,所以科普一下装饰器的使用,小伙伴们在自己写代码时可能不需要过多掌握,但是了解之后会使你的Python水平得到提升。

-------------本文结束感谢您的阅读-------------
0%