16_Python闭包

一、什么是闭包

什么是闭包:内函数对外函数非全局变量的引用,并且外函数的返回值是内函数的引用(地址)。

1 def wrapper():
2     name = 'zhangsan'
3     def inner():
4         name = 'lisi'
5     return inner
在一个外函数中,定义了内函数,内函数中引用了外函数的局部变量,并且外函数的返回值是内函数的引用。
一般情况下,函数运行完毕,在内存中占用的空间,将会被释放掉。
但是闭包是一种特殊情况,如果外函数在结束的时候,发现自己的变量将来会在内部函数中被使用
就把这个临时变量绑定给了内部函数,然后自己就结束了。
1 def wrapper():
2     name = 'zhangsan'
3     def inner():
4         name = 'lisi'
5     return inner
6 
7 wrapper()
8 print(wrapper)
9 print(wrapper())

如果函数名后紧跟一对括号,相当于现在我就要调用这个函数,如果不跟括号,相当于只是一个函数的名字里面存了函数所在内存中的引用

外函数把临时变量绑定给了内函数

1 def wrapper():
2     name = 'zhangsan'
3     def inner():
4         name = 'lisi'
5         print(name)
6     return inner
7 
8 demo = wrapper() #demo 保存了 inner 的 内存地址
9 demo()

外函数会结束,但内函数不会被释放。

使用闭包的过程中,一旦外函数被调用一次返回了内函数的引用,虽然每次调用内函数,是开启一个函数执行过后消亡,但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量。

 

原文地址:https://www.cnblogs.com/weihengblog/p/8405788.html