python-装饰器-闭包
一、闭包定义
【1】闭包:内部函数内,引用外部作用域(但是不是全局作用域)的变量,那么这个内部函数就被认为是闭包
# 闭包:内部函数内,引用外部作用域(但是不是全局作用域)的变量,那么这个内部函数就被认为是闭包
def foo1():
a = '局部变量'
# 内部函数
def foo2():
print(a) # 引用了外部变量,但不是全局变量
return foo2
foo1()() # 打印a的值:foo1()---执行foo1函数,得到foo2的函数名,foo1()()---执行foo2()函数
【2】为什么要用闭包:(https://www.bilibili.com/video/BV1JW411i7HR?spm_id_from=333.337.search-card.all.click)
1、函数内的属性,都是有生命周期的,只存在于函数执行期间。如果函数执行完毕,则属性都会消失,所以需要闭包函数来将外部作用域的属性(对象)返回,可以在其他其他作用域使用
2、闭包内的闭包函数私有化了变量,完成了数据的封装
3、调用外部作用域的变量,变量可以是外部函数传入的函数名,所以闭包也是装饰器的基础