一 闭包
1.1 闭包的定义:
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
1.2. 闭包的构成条件
通过闭包的定义,我们可以得知闭包的形成条件:
在函数嵌套(函数里面再定义函数)的前提下
内部函数使用了外部函数的变量(还包括外部函数的参数)
外部函数返回了内部函数
1.3 闭包的作用
闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁
闭包还可以提高代码的可重用行
1.4 修改闭包内使用的外部函数变量
使用 nonlocal 关键字来完成
二 装饰器
2.1. 装饰器的定义
就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。
2.2装饰器的功能特点:
不修改已有函数的源代码
不修改已有函数的调用方式
给已有函数增加额外的功能
2.3装饰器本质上就是一个闭包函数,它可以对已有函数进行额外的功能扩展。
装饰器的语法糖用法: @装饰器名称,同样可以完成对已有函数的装饰操作。
2.4 装饰器的功能
1.引入日志
2.函数执行时间统计
3.执行函数前预备处理
4.执行函数后清理功能
5.权限校验等场景
6.缓存
2.5 函数装饰器有什么作用?
装饰器本质上是一个 Python 函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能。装饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。 比如:插入日志、性能测试、事务处理、缓存、权限的校验等场景 有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用。
2.6通用装饰器的语法格式:
def logging(fn):
def inner(*args, **kwargs):
print("–正在努力计算–")
result = fn(*args, **kwargs)
return result
return inner
多个装饰器可以对函数进行多个功能的装饰,装饰顺序是由内到外的进行装饰