闭包的定义:先定义一个函数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.

 

posted on 2019-06-18 14:59  西风寞  阅读(186)  评论(0编辑  收藏  举报