Python 中的闭包

时间:2023-03-08 18:52:47

通常来说,函数中的局部变量在函数调用结束的时候不能再被引用,所分配的空间也会被回收。

但是通过闭包这种技术,函数调用结束了,它的局部变量的值还可以保存在闭包里。

试举一例:

def make_adder(n):
'''返回一个函数,返回的函数可以对传进去的参数加n
'''
def add(m):
return n + m
return add add3 = make_adder(3)
print(add3(10)) #

在函数make_adder中n就是一个局部变量,但是通过调用make_adder,它返回了一个闭包,在这个闭包里会保存n的值。

具体到python里,生成的闭包add3有一个属性func_closure,在add3.func_closure这个元组里保存了make_adder里局部变量

的值,每个变量使用cell对象保存。

使用中要注意闭包与普通嵌套函数的区别,定义闭包时返回的是函数内部定义的函数,普通嵌套函数返回的值不一定是函数。

还有Python中修饰器与闭包关系也比较紧密。