简单说,闭包就是根据不一样的配置信息获得不一样的结果闭包
再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即便已经离开了创造它的环境也不例外。因此,有另外一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。函数
def make_adder(addend):spa
def adder(augend):变量
return augend + addend配置
return adder引用
p = make_adder(23)make
q = make_adder(44)生成
print p(100)return
print q(100)参数
运行结果:
123
144
咱们发现,make_adder是一个函数,包括一个参数addend,比较特殊的地方是这个函数里面又定义了一个新函数,这个新函数里面的一个变量正好是外部make_adder的参数.也就是说,外部传递过来的addend参数已经和adder函数绑定到一块儿了,造成了一个新函数,咱们能够把addend看作新函数的一个配置信息,配置信息不一样,函数的功能就不同了,也就是能获得定制以后的函数.
再看看运行结果,咱们发现,虽然p和q都是make_adder生成的,可是由于配置参数不一样,后面再执行相同参数的函数后获得了不一样的结果.这就是闭包