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

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

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

相关推荐
dialect_7 小时前
KMP算法
开发语言·c++·算法
总要学点什么8 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
前端精髓8 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣9 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
开开心心_Every9 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c9 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
Nuanyt10 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌10 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_9679873710 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
超级架构师11 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core