在理解闭包之前,需要先理解几个概念:
-
外函数和内函数:如果在一个函数内部定义了另一个函数,外部的称为外函数,内部的称为内函数。
-
函数的临时变量:函数中定义的变量,在调用时分配内存,在结束时释放内存。
那什么是闭包呢?
闭包就是在内函数里运用外函数的临时变量,并且外函数的返回值是内函数的引用。这种情况下,外函数在结束时会将临时变量绑定给内部函数,这样就算外函数已经结束了,但是调用内函数的时候仍然能够使用外函数的临时变量。此时的内函数就是闭包函数。
# 定义套路
def outer(a): # 1. 定义外函数(此时会创建内存空间存放函数的代码和变量等,而outer是一个变量,它存放了函数的引用)
b = 10 # 2. 在外函数中定义一个临时变量
def inner(): # 3. 定义一个内函数(此时会创建内存空间存放函数的代码和变量等,而inner是一个变量,它存放了函数的引用)
print(a+b) # 4. 在内函数中运用外函数的临时变量
return inner # 5. 把内函数的引用作为外函数的返回值
# 调用套路
demo = outer(10) # 1. 调用外函数:用demo来接收inner的引用,此时demo变量里就存放了内函数的引用了
demo() # 2. 直接调用新引用的demo函数。这里的输出是:20