码迷,mamicode.com
首页 > 编程语言 > 详细

Python高级--闭包与装饰器

时间:2018-04-20 00:19:59      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:color   认证   添加   格式   img   思考   ima   func   改变   

前言:在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高级--闭包与装饰器

标签:color   认证   添加   格式   img   思考   ima   func   改变   

原文地址:https://www.cnblogs.com/fangtaoa/p/8886505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!