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高级--闭包与装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python高级-闭包-装饰器

python闭包与装饰器

2.1python高级编程1-函数式编程和装饰器

浅谈Python装饰器

python11 装饰器与闭包

python 闭包与装饰器