闭包概念、特性、使用场景与注意事项
博客导语
闭包是装饰器底层基础,新手极易混淆嵌套函数和闭包。明确闭包判定三要素,讲解变量生命周期、内存常驻坑点。
一、闭包三大判定条件(缺一不可)
存在函数嵌套:内层函数、外层函数
内层函数引用外层函数的局部变量
外层函数返回内层函数对象
二、代码示例
def outer(x): def inner(): print(x) # 引用外层局部变量 return inner f = outer(10) f() # 10三、闭包核心特性
外层函数执行完毕后,外层局部变量本该销毁,但闭包会延长变量生命周期,常驻内存,不会被垃圾回收。
四、nonlocal关键字
修改外层非全局局部变量必须用nonlocal,global仅修改全局变量,二者不能混用。
五、优缺点与场景
优点:保护数据、无需全局变量;缺点:内存常驻、容易内存泄漏。场景:装饰器、计数器、缓存统计。
