闭包就是能够读取其他函数内部变量的函数。只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
def sum(a): def add(b): return a + b return add num = sum(2) print(num) print(type(num)) print(num.__name__) # 打印函数的名称,从结果可以看出,返回函数add # 运行结果 <function sum.<locals>.add at 0x0000000001E11048> <class 'function'> add
如果再一个函数内部嵌套了另外一个函数(将外部的函数和内部的函数成为外函数和内函数),函数中引用了外函数中的变量,并且外函数的返回值是内函数,称之为 闭包。
上面的列子: sum 为外函数,add 为内函数; 内函数 add 引用了外函数 sum 的变量a; 外函数 sum 返回内函数 add