16_Python闭包
2018-02-02 16:25
344 查看
一、什么是闭包
什么是闭包:内函数对外函数非全局变量的引用,并且外函数的返回值是内函数的引用(地址)。
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()
外函数会结束,但内函数不会被释放。
使用闭包的过程中,一旦外函数被调用一次返回了内函数的引用,虽然每次调用内函数,是开启一个函数执行过后消亡,但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量。
相关文章推荐
- 16、Python中的闭包、上下文、类的专有方法及鸭子类型
- Python-16 函数:内嵌函数和闭包
- Python 之 闭包
- Python闭包执行时值的传递方式实例分析
- Python 的闭包
- python 练习 16
- python学习笔记-(16)python中的函数对象
- 初学python闭包时的疑问
- python学习日记_第七天(ex16~17)
- Python 闭包的使用方法
- python学习笔记16:tuple, set, dictionary
- python中的闭包
- Python中的闭包实例详解
- python的闭包以及闭包在设计里的意图和作用
- 深入理解javascript原型和闭包(16)——完结
- Python(2.7.6) 函数对象与闭包
- Python学习笔记16:网络编程
- python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。
- python 学习笔记 8(闭包)
- python中闭包中变量的影响因素