闭包概念

如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数就被认为是闭包(closure)。

定义在外部函数内但由内部函数引用或者使用的变量称为自由变量。

总结一下,创建一个闭包必须满足以下几点:

  1. 必须有一个内嵌函数
  2. 内嵌函数必须引用外部函数中的变量
  3. 外部函数的返回值必须是内嵌函数

装饰器

def use_logging(func):

def wrapper():
    logging.warn("%s is running" % func.__name__)
    return func()   # 把 foo 当做参数传递进来时,执行func()就相当于执行foo()
return wrapper

use_logging 就是一个装饰器,它一个普通的函数,它把执行真正业务逻辑的函数 func 包裹在其中,看起来像 foo 被 use_logging 装饰了一样,use_logging 返回的也是一个函数,这个函数的名字叫 wrapper。在这个例子中,函数进入和退出时 ,被称为一个横切面,这种编程方式被称为面向切面的编程。

说白了就是,装饰器通过包裹要装饰的方法,可以在它调用之前或者之后附加功能

举例子:眼镜的墨镜夹片

results matching ""

    No results matching ""