如果一个函数定义在另外一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么这个函数就是一个闭包。
1、先介绍一下python局部变量和全局变量
局部变量一般指的是函数内部定义的变量,局部变量生命周期与定义的函数一致。函数调用完成后,局部变量的工作空间也会被销毁
全局变量指的是函数外定义的变量,内存空间是全局的。在任意地方都可以调用
2、介绍一下python的嵌套函数
简单来说就是在函数A内部再定义一个函数B,然后再函数A函数体内再调用函数B。套路就是这样
3、在函数外是无法调用函数内的局部变量的,而闭包就是用来解决这种情况的。闭包指的是函数嵌套函数,但是内函数会调用外函数的局部变量或者参数。导致外函数调用完内函数后,参数和变量不会被垃圾回收机制回收。
装饰器函数主要作用是不影响原有函数的功能,在函数前后增加新的功能。比如日志打印功能、计算时间
装饰器不影响原有函数功能,即需要在函数执行之前或者函数执行之后进行操作。比如说计算函数运行时间的代码,我们需要在函数执行之前开始计时,函数执行后再统计时间。定义一个函数,代码逻辑是,需要传入参数,这个参数即是功能函数。
定义的装饰器函数有内函数和外函数组成
外函数接受一个参数,参数为要装饰的功能函数。外函数的返回值为内函数【不是调用】
内函数接受装饰的功能函数的参数
![](https://img.haomeiwen.com/i15674568/ba63b574646774da.png)
执行过程是
aaaa=test(aaaa) 返回内函数inner_fun
aaaa(1,2,3,age=10,gender=1) 即执行inner_fun(1,2,3,age=10,gender=1)
为什么说装饰器是闭包呢,因为内函数inner_fun调用了函数外的参数aaaa。而函数外aaaa指向内函数inner_fun。
网友评论