首页 > 代码库 > Python之闭包
Python之闭包
Python之闭包
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
闭包的一个例子:
def counter(start_at=0): count = [start_at] def incr(): count[0] += 1 return count[0] return incrcnt = counter(5)print(cnt()) #6print(cnt()) #7print(cnt()) #8
这里,incr是内部函数,它引用了外部作用域(但不是在全局作用域)的变量count,那么这个内部函数就被认为是闭包,而count就是自由变量,它定义在外部函数,但由内部函数使用。
闭包更适合需要一个必须有自己的作用域(既不是局部作用域、也不是全局作用域)的回调函数情况,尤其是回调函数是很小巧而且简单的。
其实,装饰器也是一种闭包,例如:
def makebold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrappeddef makeitalic(fn): def wrapped(): return "<i>" + fn() + "</i>" return wrapped@makebold@makeitalicdef hello(): return "hello world"print hello()
Python之闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。