在说闭包之前先看下以下这几行代码:
def outer():
a = 1
def inner():
print(a)
inner()
当我在外部调用outer()这个函数时,每次调用都会声明一个a变量,执行完函数便销毁a变量,调用100次便要重复这个过程100次。
而闭包则可以避免这种情况。
def outer():
a =1
def inner():
print(a)
return inner
inn = outer()
inn()
变量a会一直存放在内存中某个地址,直到程序结束。因为inn是全局作用域中的一个变量,它一定要等到程序结束了才能被释放,所以inn使用到的a变量就必须也一直保留在内存中,后续再调用时就不用再产生a,直接去原先的地址拿出即可。从这看出,闭包起到了延长a的生命周期的作用。
闭包的条件是:嵌套函数;内部函数引用外部函数的变量。