Python中的闭包和装饰器

非 Y 不嫁゛ 提交于 2020-01-18 10:30:46

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

 

 

两者关系:

装饰器就是一种闭包

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!