python闭包
闭包概念:
内部函数对外部函数作用域里变量的引用
函数内的属性,都是有生命周期的,都是在函数执行期间
闭包可以让一个变量长期在内存中不被释放
内部函数的生命周期
def func(): # 外部函数
print('this is func.')
def in_func(): # 内部函数
print('this is in_func.')
func() # this is func.
'''
运行外部函数(func),内部函数(in_func)就被创建了
创建过程在外部函数的执行过程中
函数内的属性,都是有生命周期的,都是在函数执行期间
执行func函数,只会输出func的输出,并不会执行in_func
因为in_func在func执行过程中创建了,但是并没有被调用
'''
闭包函数
'''
如果我们想在其他地方调用内部函数
我们可以将内部函数对象返回给外部函数,然后实例外部函数
'''
def func(): # 外部函数
print('this is func.')
def in_func(): # 内部函数
print('this is in_func.')
return in_func #内部函数对象返回给外部函数
var = func() # func接收了返回的in_func object
var() #实例var 也就是 in_func() 就调用到了内部函数
'''
如果不将内部函数返回给外部函数
可以直接在func 内 调用 in_func()输出内部函数的内容
当func()执行结束,in_func被销毁
'''
def func(): # 外部函数
a = 1 # 设定外部变量a = 1
def in_func(number): # 内部函数
print( a+=number) #
return in_func
var = func()
var(1)
'''
上述代码,func函数变量a,在函数外部不能使用,a的作用域是func的整个函数
定义内部函数in_func,in_func也是func的作用域内
我们可以使用内部函数完成对外部变量的引用
因为我们将in_func 使用a变量,in_func赋值给var实例,var存在所以a没有销毁
del var 之后 a变量销毁无法使用
'''
# 内部函数就是闭包函数,闭包函数私有化了变量完成数据封装
示例
my_list = [1, 2, 3, 4, 5]
def func(obj):
print('func:', obj)
def func1():
obj[0] += 1
print('func1:', obj)
return func1
var = func(my_list) # func: [1, 2, 3, 4, 5]
var() # func1: [2, 2, 3, 4, 5]
var() # func1: [3, 2, 3, 4, 5]
var() # func1: [4, 2, 3, 4, 5]
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)