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