闭包
闭包:嵌套函数,内部函数调用外部函数的变量。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def outer(): a = 1 def c(): print(a) print(c.__closure__) outer()
应用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import urllib #模块 from urllib.request import urlopen ret = urlopen('http://www.xiaohuar.com/hua/').read() print(ret)
可以打开网页源代码
作用
当我们在写代码时需要调用到一个函数里面的的函数,但是又不想因为调用函数导致这个函数的上级局部函数中的变量在每调用一次都会重复的生成和消失,导致占用空间。我没因此就可以使用闭包来实现这个功能。
例如下面这个函数:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def low(): a = 1 def hah(f): print("lala") return hah #函数名可以作为函数的返回值 hah(low)#函数名可以作为函数的参数 shagou = low() shagou
当我们需要调用low()函数的下层函数哈哈()时。我们可以将hah()的函数名作为返回值,通过在全局作用域中将low()函数赋给shagou,当我需要调用sha函数时可以直接用hsagou来调用,而且不会让low()函数中的变量随着程序每一次的运行和结束而生成和消失。避免导致内存的占用。