Python高级--闭包与装饰器
Posted fangtaoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级--闭包与装饰器相关的知识,希望对你有一定的参考价值。
前言:在Python中,闭包是一种非常有用的功能!它通常与装饰器一起搭配使用,可以在不改变被装饰函数的功能的基础上,完成更多的功能。如权限认证。
一、如何定义闭包
1.闭包就是两个嵌套的函数,外层函数返回内层函数的引用,而且外层函数必须携带参数!为什么外层函数必须要有参数呢?可以思考一下!
基本格式如下:
1 def outer_fun(func):
2 def inner_fun():
3 pass
4 return inner_fun
2.与普通函数的区别:
闭包的外层函数的变量可以在内存中保存着,有点像类;而普通函数一旦执行完,那么就要回收内存。
二、生成器
1.什么是生成器:@闭包的外层函数名
2.生成器的作用:不修改被装饰函数的功能外,再通过闭包的方式添加额外的功能!
3.基本结构:
1 def outer_func(func):
2 def inner_func():
3 pass
4 return inner_func
5
6
7 @outer_func # test = outer_func(test)
8 def test():
9 pass
重点:上述代码的第七行和第八行是重点,看到这个语法糖要想到其本质: test = outer_func(test)
4.结论:
(1). 装饰前的test函数和闭包外层函数的func是一样的;
(2). 装饰后的test函数是闭包内层函数的引用,也就是说此时test指向了inner_func函数体;
(3). 装饰器一般不改变原先函数的行为。
5.万能闭包
1 def outer_fun(func):
2 def inner_fun(*args, **kwargs):
3 func(*args, **kwargs)
4
5 return inner_fun
6
7
8 def test(*args, **kwargs):
9 pass
三、装饰器内存图解
1.一个装饰器装饰一个函数的内存图解:
2.两个装饰器装饰一个函数的内存图解
以上是关于Python高级--闭包与装饰器的主要内容,如果未能解决你的问题,请参考以下文章