前言
最近学习了 python 的闭包以及 nonlocal 关键字,借此博客归纳整理,纯小白,学习的比较浅显,如有不严谨之处,敬请指正。
闭包
python 中闭包从表现形式上可定义为:
如果在一个内部函数里,对外部作用域中的变量(但不是在全局作用域中的变量)进行了引用,那么该内部函数就被称为闭包函数。
#例如:
def FIRST(x):
def SECOND(y):
return x*y
return SECOND
#对于 FIRST 来说 SECOND 是一个内部函数且 SECOND 中引用了外部作用域中的变量X
#因此内部函数 SECOND 就被称为是一个闭包
包含闭包函数的函数的使用:
有两种使用的方法,如下:
and
闭包的特殊功能:
闭包可以保存运行环境。一般在函数调用结束时,系统会自动回收临时变量所占的存储单元,临时变量将不复存在,但在闭包中,由于内部函数引用了外部作用域中的变量,因此外部函数会把临时变量与内部函数绑定到一起,这样虽然外部函数结束了,但调用内部函数时依旧能够使用临时变量,即闭包外层的参数可以在内存中进行保留。
(关于该部分还没有完全理解,等理解后再补上相应的示例…)
nonlocal 关键字
如果想要在内部函数中修改外部函数的变量值,则需要使用 nonlocal 关键字声明变量。
#例如:
def Fun1():
x = 5
def Fun2():
nonlocal x # <--
x *= x
return x
return Fun2
PS :除了使用 nonlocal 关键词以外还可以使用容器类型来实现在内部函数中修改外部函数的变量值,如下:
#例如:
def Fun1():
x = [5]
def Fun2():
x[0] *= x[0]
return x[0]
return Fun2
(此方法与 Python 的内存管理机制有关,具体原理我还没学到那来…)