Python 中的闭包

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

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

    试举一例:

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

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

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

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

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

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

posted @ 2018-02-26 11:10  宁阳  阅读(179)  评论(0编辑  收藏  举报