1、局部变量的生命周期
def func1():
test = 100 # 局部变量
def func2():
test2 = 200 # 局部变量
print(test2)
print(test)
func2()
func1()
①局部变量随着函数的调用而生成
②随着函数的结束而释放(销毁)
③每次调用函数,局部变量都是全新的
2、闭包的作用
闭包可以延长外层函数局部变量的生命周期(即使外层函数调用结束,其局部变量也不会立即释放,而是被内层函数"记住"并继续使用)
3、闭包的三个必要条件
①有内外函数
②内函数引用外函数的局部变量
③外函数返回内函数
4、闭包示例
def outer(): # 外函数
x = 100 # 外函数的局部变量
def inner(): # 内函数
print(x) # 内函数引用了外函数的变量 x
return inner # 外函数返回内函数(不带括号)
调用闭包
func = outer() # func 接收的是 inner 函数对象
func() # 输出 100
func() # 仍然输出 100(x 没有被释放)
func() # 每次调用,x 都被"记住"
流程示意图:
outer() 被调用
↓
创建局部变量 x = 100
↓
定义 inner 函数(此时 inner 记住了 x)
↓
返回 inner 函数对象
↓
outer() 调用结束(但 x 没有被销毁,因为被 inner 引用)
↓
func = inner
↓
func() → 打印 x → 100
5、闭包本质
闭包=函数+它引用的变量
相当于把"函数"和"环境数据"打包在一起