码迷,mamicode.com
首页 > 编程语言 > 详细

Python之闭包

时间:2015-01-09 18:48:44      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

Python之闭包

 

闭包(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() 

 

Python之闭包

标签:

原文地址:http://www.cnblogs.com/chenny7/p/4213922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!