Python闭包需满足三条件:函数嵌套、内部函数引用外部局部变量、外部函数返回内部函数对象;它可封装状态、实现装饰器等,但需注意延迟绑定陷阱。

Python闭包的核心在于:内部函数引用了外部函数的局部变量,并且外部函数返回了这个内部函数。它让函数能“记住”自己被定义时的环境,实现轻量级的状态封装。
闭包的基本写法与判断要点
一个函数要构成闭包,必须同时满足三个条件:
- 存在函数嵌套(内部函数定义在外部函数内部)
- 内部函数使用了外部函数的局部变量(非全局变量)
- 外部函数返回了内部函数(注意:不是调用结果,是函数对象本身)
例如:
def make_adder(n):
def add(x):
return x + n # 引用了外部变量 n
return add # 返回函数,不是 add(x)
<p>plus_5 = make_adder(5)
print(plus_5(3)) # 输出 8登录后复制
利用闭包保存状态,替代类的简单场景
当只需要维护少量、单一维度的状态(比如计数器、偏移量、配置参数),闭包比定义类更简洁直观。
立即学习“Python免费学习笔记(深入)”;
比如实现一个自增计数器:
def counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
<p>c = counter()
print(c()) # 1
print(c()) # 2登录后复制
这里 nonlocal 是关键——它告诉 Python,count 不是局部变量,而是外层函数的变量,允许内部函数修改它。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~