python闭包closure

一、概念

闭包(closure)是一种引用了非局部变量(non-local variable)的内嵌函数(nested function)。

名词解释:

内嵌函数(nested function):定义在其他函数内部的函数叫内嵌函数。内嵌函数可以访问所定义在的外部函数内的变量。

非局部变量:非局部变量(non-local variable)在python中默认只读,如果想要修改它,就需要声明为nonlocal变量(使用nonlocal关键词,python 3.X以后添加的)。

来定义一个闭包:

```

def print_msg(msg):

#this is the outer enclosing function

def printer():

#this is the nested function

print(msg)

return printer

another_print = print_msg("hello")

another_print()

```

上面这种关联着数据的代码块就是python中的闭包了。而且变量的取值会被保留,即使闭包超出了该变量的作用范围或者外部的函数被删除。

二、条件

满足什么条件才能被称为闭包呢?

像上面的例子一样,满足了以下3个条件:

1、需要有一个内嵌函数(定义在函数中的函数);

2、内嵌函数需要引用定义在外部函数中变量;

3、内嵌函数需要被返回;

三、场景

最常使用闭包的场景可以归纳为以下几种:

1、在一个类中只有非常少的方法(通常是只有一个);

2、避免使用全局变量的时候;

3、装饰器模式中;

4、提供一致的函数签名;

你可能感兴趣的:(python闭包closure)