标签:
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
闭包的一个例子:
def counter(start_at=0): count = [start_at] def incr(): count[0] += 1 return count[0] return incr cnt = counter(5) print(cnt()) #6 print(cnt()) #7 print(cnt()) #8
这里,incr是内部函数,它引用了外部作用域(但不是在全局作用域)的变量count,那么这个内部函数就被认为是闭包,而count就是自由变量,它定义在外部函数,但由内部函数使用。
闭包更适合需要一个必须有自己的作用域(既不是局部作用域、也不是全局作用域)的回调函数情况,尤其是回调函数是很小巧而且简单的。
其实,装饰器也是一种闭包,例如:
def makebold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped def makeitalic(fn): def wrapped(): return "<i>" + fn() + "</i>" return wrapped @makebold @makeitalic def hello(): return "hello world" print hello()
标签:
原文地址:http://www.cnblogs.com/chenny7/p/4213922.html