闭包
1. 什么是闭包
《Python核心编程》中的解释:
”如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包。“
维基百科的解释:
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
也就是说,闭包就是个内部函数,只不过这个内部函数引用了一个非全局变量的外部变量,这个外部变量的生命周期不会因为函数调用结束而消亡,该变量的作用域即非全局的,也非局部的,在《Python核心编程》中称为”流浪“作用域。
2. 闭包例子
def counter(start_at=0):
count = [start_at]
def incr():
count[0]+=1
return count[0]
return incr
这里的内部函数incr()
就是闭包,调用如下:
>>>count=counter(10)
>>>count()
11
>>>count()
12
>>>count()
13