在函数内部再定义一个函数,内部函数用到了外边函数的变量,并且外部函数将内部函数的引用返回,那么将这个函数以及用到的一些变量称之为闭包
def func1(a):
def func2(b):
return a+b
return func2
f1 = func1(100)
f2 = func1(50)
print(f1(1))
print(f1(1))
当在一个嵌套的函数中对变量申明为nonlocal时,就明确表示这个变量是外部函数中定义的变量
def outter(first):
sum = first
def inner(second):
nonlocal sum
sum = sum + second
return sum
return inner
闭包优化了变量,原来需要类对象完成的工作,闭包也可以完成。由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存