对Python中“闭包”的理解

什么是闭包?

如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束

### Python 闭包的工作原理 在 Python 中,闭包是一种特殊类型的函数,它可以访问其外部作用域中定义的变量,即使这些变量在其创建时所在的外部函数已经结束执行[^2]。这种行为的关键在于闭包会捕获并存储对外部变量的引用,而不是简单地复制它们的值。 #### 外部变量的作用范围 当一个嵌套函数引用了其外部函数中的局部变量时,这个嵌套函数就形成了一个闭包。由于闭包保存了对其外部环境的引用,因此它能够继续访问和修改这些变量,而不会因为外部函数的退出而导致变量被销毁[^3]。 以下是关于如何构建和使用 Python 闭包的一个具体例子: ```python def outer_function(x): def inner_function(y): return x + y return inner_function closure_example = outer_function(10) print(closure_example(5)) # 输出: 15 ``` 在这个例子中,`outer_function` 返回了一个 `inner_function` 函数对象。尽管 `outer_function` 已经完成执行,但是 `inner_function` 依然可以访问到参数 `x` 的值。 #### 应用场景举例 ##### 场景一:保持状态 利用闭包可以轻松实现计数器等功能,无需依赖全局变量或其他复杂的结构即可维护状态信息。 ```python def create_counter(): count = 0 def counter(): nonlocal count count += 1 return count return counter counter_instance = create_counter() print(counter_instance()) # 输出: 1 print(counter_instance()) # 输出: 2 ``` 这里展示了通过闭包机制维持一个私有的可变状态——即每次调用都会增加的计数值。 ##### 场景二:延迟计算 有时候希望推迟某些昂贵运算直到真正需要的时候才去求解,这时也可以借助于闭包来达成目的。 ```python import math def lazy_square_root(number): result = None def compute_if_needed(): nonlocal result if result is None: result = math.sqrt(number) return result return compute_if_needed sqrt_computer = lazy_square_root(9) print(sqrt_computer()) # 首次调用实际进行了平方根运算, 输出: 3.0 print(sqrt_computer()) # 后续再次调用则直接返回缓存的结果, 输出: 3.0 ``` 此片段说明了怎样运用闭包来进行懒加载式的资源管理或者性能优化策略[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值