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、闭包本质

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

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

相关推荐
czq_268671948721 分钟前
Python打卡第36天
pytorch·python·深度学习
计算机编程指导师24 分钟前
【计算机毕设】基于Hadoop+Spark的美国互联网银行贷款数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·贷款
Starry-sky(jing)39 分钟前
onnxruntime 安装后 GPU 没加速?3 条命令确认它跑在 CPU 还是 GPU
python·gpu·cuda·onnxruntime·推理加速
步行cgn40 分钟前
Spring AOP 实战:安全日志
python·安全·spring
北i43 分钟前
Dubbo 默认超时重试:把下游打雪崩的隐形放大器
开发语言·qt·dubbo
诺伦1 小时前
OpenAI Agents API 公测拆解:托管编排+持久会话+自有沙箱搭一条自动增长流水线 | RiseClaw玄策
python·openai·ai agent·营销自动化·agent编排
10mAh1 小时前
【Java】ArrayList 遍历删除为什么报错?三种写法与漏删复现
java·开发语言·windows
坊钰1 小时前
【LangGraph框架入门级】2. 图核心概念:State、Node、Edge 与 Reducers
python·ai编程·langgraph
wewowilling1 小时前
AI大模型开发--01Python基础(无废话)
开发语言·python·函数
小猴子爱上树1 小时前
跨境电商AI图片翻译工具:批量图片翻译、视频字幕翻译与智能抠图一站式解决
大数据·人工智能·python·音视频