Python中的闭包和装饰器

1.闭包

专业解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

通俗解释:简单说,闭包就是根据不同的配置信息得到不同的结果

例子:

def make_adder(addend):
    def adder(augend):
        return augend + addend
    return adder

p = make_adder(23)
q = make_adder(44)

print p(100)
print q(100)

执行结果:

123
144

2.装饰器

概念:对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。

例子:

def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print '%s %s():' % (text, func.__name__)
            return func(*args, **kw)
        return wrapper
    return decorator

@log('execute')
def now():
    print '2013-12-25'

执行结果:

>>> now()
execute now():
2013-12-25

两者关系:

装饰器就是一种闭包

装饰器的参数是一个函数或类,专门对类或函数进行加工处理

原文地址:https://www.cnblogs.com/bbbbbd/p/7717916.html