Python中闭包的原理

定义:

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

简单闭包的例子:
下面是一个使用闭包简单的例子,模拟一个计数器,通过将整型包裹为一个列表的单一元素来模拟使看起来更易变:
函数counter()所作的唯一一件事就是接受一个初始化的值来计数,并将该值赋给列表count成员,然后定义一个内部函数incr()。通过内部函数使用变量count,就创建了一个闭包。最魔法的地方是counter()函数返回一个incr(),一个可以调用的函数对象
1 def counter(st=0):
2     count = [st]
3     def incr():
4         count[0] += 1
5         return count[0]
6     return incr
7 c = counter(10)
8 print(c())

概念

上面代码中的incr函数,就是闭包。

 闭包就是能够读取其他函数内部变量的函数( 函数incr读取了counter函数的count变量)

只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包的用途

闭包可以用在许多地方。它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在counter调用后被自动清除。

原文地址:https://www.cnblogs.com/eric_yi/p/7241030.html