闭包的定义:先定义一个函数func1,然后在定义的函数的内部再定义一个函数func2,并且这个内部函数func2,使用到了外边函数func1的变量,那么这个函数func2和用到的变量称为闭包。
在理解闭包之前,先来理解一下函数名,看以下代码:
def mm(): pass print(mm)
执行结果:
从上面可以看出;
在python中定义函数的时候,函数名也是一个变量,这个变量(函数名)指向了一个地址,这个地址对应的空间中存放函数执行体。
接下来是看一个简单的闭包程序:
1 # 闭包 2 def mm(num1): 3 def nn(num2): 4 print("nn==>",nn) 5 return num1 + num2 6 return nn 7 8 ret = mm(10) 9 ret1 = ret (20) 10 print("ret==>",ret) 11 print(ret1)
执行结果:
这段代码的执行过程是:
1.python解释器从上往下进行解析,遇到函数跳过;
2.当执行到第8行的时候,这时定义了一个变量ret,这个变量ret等于函数mm的返回值nn;
3.又因为nn是一个函数名,也就是说,此时的ret指向一个函数的引用(函数的地址),ret = nn。如上图中红色框部分。
4.当执行ret(20)的时候,相当于执行nn(20),最后返回的结果是30.