文章目录
闭包
在函数嵌套的前提下, 如果一个内部函数引用了所在外层函数作用域中的变量,并且外层函数将该内部函数作为返回值返回,那么这个内部函数就叫做闭包函数,简称闭包。
简单闭包
python
def outer(loge):
def inner(mag):
print(f"{loge} > {mag} > {loge}")
return inner
fn1 = outer("hello")
fn1("python") # hello > python > hello
fn1("java") # hello > java > hello
也可以在内部函数中修改外部函数的值, 需要用到 nonlocal 关键字修饰外部函数的变量, 才可以在内部函数中修改它
nonlocal 关键字
python
def outer(num1):
def inner(num2):
nonlocal num1
num1 += num2
print(num1)
return inner
fn = outer(5)
fn(3) # 8
fn(4) # 12
每次调用外部函数, 结束后值并没有归零, 而是持续不断的保存
在上面这段代码中, 对于 outer 函数来说, num1 属于内部变量 ,在外部是无法修改 num1的值的
闭包的注意事项
优点:
- 无需定义全局变量即可实现通过函数, 持续的访问, 修改某个值
- 闭包使用的变量所用于函数内部, 难以被错误的调用修改
缺点:
- 由于内部函数持续引用外部函数的值, 所以会导致这一部分内存空间不被释放, 一直占用内存
注意 :想要在内部函数中修改外部函数的值, 需要用 nonlocal关键字修饰