闭包:给函数装了个“记忆背包”,让它带着出生时的环境去旅行!
概要
本质:闭包是带着初始化记忆的函数
实现方式:函数内嵌套函数,外层函数的返回值为内嵌的函数。不允许直接嵌套函数的语言可以用lambda表达式实现
通俗解释编程中的闭包
想象你有一个小房子(外部函数),里面放了一些家具(外部变量)。你在房子里又造了个带窗户的小盒子(内部函数)。神奇的是:即使你把小盒子拿出房子,它依然能透过窗户看到房子里的家具——这就是闭包!
闭包的核心:内部函数能记住并访问它被创建时的环境(外部函数的变量),即使外部函数已经执行完毕。
闭包三要素
- 嵌套函数:函数内部定义另一个函数
- 内部函数访问外部变量:里层函数用了外层函数的变量
- 外部函数返回内部函数:把里层函数像礼物一样送出去
示例代码(Python)
# 外部函数(小房子)
def make_adder(x):  # x 是外部变量(家具)
    # 内部函数(带窗户的小盒子)
    def adder(y):
        return x + y  # 内部函数访问外部变量x
    
    return adder  # 返回内部函数(把盒子送出去)
# 创建闭包:add5记住了x=5的环境
add5 = make_adder(5)  # 房子造好了,x=5
# 此时外部函数make_adder已执行完毕
# 但闭包仍能访问当时的x值!
print(add5(3))  # 输出 8 (5+3)
print(add5(10)) # 输出 15 (5+10)
# 另一个独立的闭包(新房子)
add100 = make_adder(100)
print(add100(7))  # 输出 107 (100+7)
类比现实场景
假设你开了个奶茶店(外部函数):
- 设定基础糖量 = 50%(外部变量)
- 制造定制工具(内部函数):def make_customizer(base_sugar): def customizer(extra_sugar): return base_sugar + extra_sugar return customizer
- 给不同分店发放定制器:shopA = make_customizer(50) # A店基础糖50% shopB = make_customizer(30) # B店基础糖30%
- 分店独立工作:shopA(10) # 返回60% (记住50%基础) shopB(20) # 返回50% (记住30%基础)
为什么需要闭包?
- 封装私有数据:如计数器(外部变量隐藏不可直接修改)
- 保存状态:函数能记住之前的操作环境
- 定制功能:像工厂一样批量生成相似函数
💡 闭包就像给函数装了个“记忆背包”,让它带着出生时的环境去旅行!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号