1、 文章详解:
https://www.jb51.net/article/161754.htm
2、闭包的概念:
1、一个函数中定义了另一个函数
2、内部函数使用了外部函数的变量
(注意此时引用只是说调用,但是不能修改,如果想在内部函数中修改 外部函数的局部变量的话必须在内部函数中加nonlocal才可以修改)
3、返回内部函数的引用(即地址)
例子:

3、装饰器简介
不管是三层装饰器还是两层装饰器,都是最里面的一层传递的参数是待装饰函数的参数(即*args,**kwargs),然后倒数第二层的参数是待装饰的函数名参数(即func),如果是三层的,则最外层的参数是装饰器(@decorator)的传入的外部参数
wraps()
Python装饰器在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生变化),为了不影响,Python中functools包中提供了一个叫wraps的decorator来消除这样的副作用
两层装饰器:

三层装饰器:

4、装饰器功能
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后清理功能
- 权限校验等场景
- 缓存

本文详细解析了Python中的闭包概念,包括内部函数使用外部函数变量的原理及nonlocal关键字的作用。同时,全面介绍了装饰器的功能,如日志记录、函数执行时间统计、权限校验等,并探讨了两层与三层装饰器的区别及wraps()的使用。
395

被折叠的 条评论
为什么被折叠?



