闭包
1.创建进程2.Process类语法详解3.进程间通信4.进程池5.进程间的锁和信号量6.根据进程编号杀死指定进程os.kill7.守护进程8.线程9.实现多线程多任务的步骤10.threading.Thread类详解11.守护线程&&threading.enumerate()12.python线程并行执行与java的线程并行执行的对比13.IO密集型任务与CPU密集型任务14.多线程共享全局变量的问题15.多线程共享资源之竞态条件16.互斥锁17.死锁18.线程池19.进程与线程的对比
20.闭包
21.闭包之nonlocal关键字的作用22.闭包之作用23.闭包之可能引起的问题24.弱引用25.装饰器26.装饰器示例27.property 属性28.with语句和上下文管理器详解、最佳实践、示例29.生成器30.深浅拷贝31.正则表达式函数参数
Python中一切皆引用:变量名(包括类名和函数名等)存放的都是内存空间(地址),所以都可以作为参数传递
函数名的作用
① 函数名存放的是函数所在空间的地址
② 函数名()执行函数名所存放空间地址中的代码
③ func01 = func02函数名可以像普通变量一样赋值,func01() 等价于 func02()
示例
''' Python中一切皆引用:变量名(包括类名和函数名等)存放的都是内存空间(地址),所以都可以作为参数传递 ''' def func01(): print("func01 is show") # 1. 通过“函数()”形式执行函数 # func01() # 2. 函数名存放的是函数所在空间的地址 print(func01) # <function func01 at 0x0000022594FBD8A0> # 3. 函数名也可以像普通变量一样赋值即函数名、类名都是引用类型 # func02 = func01 # func02() # 4. 函数当实参传递 def foo(func): func() # 执行函数 foo(func01)
1. 函数名存放的是函数所在空间地址
2. 函数名()执行函数名所存放空间地址中的代码
闭包
有了函数可以当作实参传递,就有了衍生出了闭包的概念
定义
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包
1. 闭包是一个函数的引用即可以理解为是一个函数名
2. 闭包的3个前提条件
1> 函数嵌套
2> 内部函数使用了外部函数的变量(包含外部函数的形参变量)
3> 外部函数的返回值是内部函数的引用
示例
1 def outer_function(x): 2 def inner_function(y): 3 return x + y 4 return inner_function 5 6 closure = outer_function(5) # closure就是闭包 7 print(closure(3)) # 输出8
在这个示例中,outer_function
是外部函数,它接受一个参数x
。
在外部函数中,我们定义了一个内部函数inner_function
,它接受一个参数y
。
内部函数引用了外部函数的变量x
,并返回x + y
的结果。
然后,我们调用outer_function
并将其结果赋值给变量closure
。此时,closure
就成为了一个闭包,它可以访问和操作外部函数作用域中的变量x
。
最后,我们调用closure
并传入参数3
,输出结果为8
。这是因为closure
内部的inner_function
可以访问并操作外部函数作用域中的变量x
,所以它返回了5 + 3 = 8
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能