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

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

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

相关推荐
东东最爱敲键盘1 小时前
day9.C++多态之虚函数
开发语言·c++
码云数智-园园1 小时前
类似小鹅通的知识付费小程序平台有哪些
开发语言
snow@li1 小时前
Java:跨平台原理与JDK、JRE、JVM全景深度解析
java·开发语言·jvm
覆东流1 小时前
2.Java程序基础
java·开发语言·后端
ttwuai1 小时前
Go 后台定时任务启停不生效怎么办?先查调度同步链路
开发语言·后端·golang
小的~~2 小时前
ThreadLocal 、InheritableThreadLocal 与 TransmittableThreadLocal 的进阶指南
java·开发语言
键盘会跳舞2 小时前
C++:std::pair 源码级深度剖析 —— 关联容器的基石
开发语言·c++·pair·关联容器
(Charon)2 小时前
【C++】手写线程安全队列:mutex + condition_variable 实现生产者消费者模型
c语言·开发语言·c++
崖边看雾2 小时前
同步上下文管理器规则
开发语言·数据库