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

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

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

相关推荐
wuyk5551 小时前
104.C 语言字节对齐:从底层原理到工程实践的完整指南
c语言·开发语言·stm32·单片机·嵌入式硬件
君顾17 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生8 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
问天_观心8 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨8 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作8 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
平头哥技术团队8 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++8 小时前
【洛谷】kmp算法
开发语言·算法
梦想的颜色8 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕8 小时前
Dijkstra算法详解与应用
python·算法