WELCOME

不积跬步,无以至千里;不积小流,无以成江海。

Python闭包

1.闭包

  函数只是一段可执行代码,编译后就"固化"了,每个函数在内存中只有一份实例,得到函数的入口点便可以执行函数了。函数还可以嵌套定义,即在一个函数内部可以定义另一个函数,有了嵌套函数这种结构,便会产生闭包问题。

2.什么是闭包

  闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数块+引用环境)。

 1 def outer(n):
 2     a = 10
 3 
 4     def inner():
 5         b = a + n
 6         print('内部函数', b)
 7 
 8     return inner
 9 
10 
11 r = outer(5)
12 print(r)
13 r()
14 # >> <function outer.<locals>.inner at 0x00000170A89D90D8>
15 #    内部函数 15

 

  在这段程序中,函数inner是函数outer的内嵌函数,并且inner函数是outer函数的返回值。我们注意到一个问题∶内嵌函数inner 中引用到外层函数中的局部变量num , Python解释器会这么处理这个问题呢﹖先让我们来看看这段代码的运行结果,当我们调用分别由不同的参数调用outer函数得到的函数时,得到的结果是隔离的(相互不影响),也就是说每次调用outer函数后都将生成并保存一个新的局部变量num,这里outer函数返回的就是闭包。如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

posted @ 2022-03-23 21:26  Ambitious~  阅读(30)  评论(0)    收藏  举报