Python闭包

1、局部变量的生命周期

def func1():

test = 100 # 局部变量

def func2():

test2 = 200 # 局部变量

print(test2)

print(test)

func2()

func1()

①局部变量随着函数的调用而生成

②随着函数的结束而释放(销毁)

③每次调用函数,局部变量都是全新的

2、闭包的作用

闭包可以延长外层函数局部变量的生命周期(即使外层函数调用结束,其局部变量也不会立即释放,而是被内层函数"记住"并继续使用)

3、闭包的三个必要条件

①有内外函数

②内函数引用外函数的局部变量

③外函数返回内函数

4、闭包示例

def outer(): # 外函数

x = 100 # 外函数的局部变量

def inner(): # 内函数

print(x) # 内函数引用了外函数的变量 x

return inner # 外函数返回内函数(不带括号)

调用闭包

func = outer() # func 接收的是 inner 函数对象

func() # 输出 100

func() # 仍然输出 100(x 没有被释放)

func() # 每次调用,x 都被"记住"

流程示意图:

outer() 被调用

创建局部变量 x = 100

定义 inner 函数(此时 inner 记住了 x)

返回 inner 函数对象

outer() 调用结束(但 x 没有被销毁,因为被 inner 引用)

func = inner

func() → 打印 x → 100

5、闭包本质

闭包=函数+它引用的变量

相当于把"函数"和"环境数据"打包在一起

相关推荐
IvanCodes29 分钟前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
Patrick在香港1 小时前
Claude 工具调用返回空:8 次失败里只有 1 次状态码不对,其余全带 200
爬虫·python·api·claude·香港
Web3&Basketball2 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
aramae2 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
AIFQuant3 小时前
ETF行情API接入踩坑记:从报错到跑通的七个问题
python·金融·区块链·etf·基金
GPU实战笔记4 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
狗狗狗狗狗乐啊4 小时前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
qq_2518364575 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
白猫不黑5 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
郑州光合科技余经理5 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程