python中的闭包

一、闭包

  1.1闭包的定义

      在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。

  1.2闭包的构成条件

     (1)函数嵌套

     (2)内部函数使用了外部函数的变量或者外部函数的参数

     (3)外部函数返回了内部函数

简单的实例:

复制代码
 1 # 外部函数
 2 def fun_out(a):
 3     # 内部函数
 4     def fun_inner(b):
 5         result = a + b
 6         print(result)
 7 
 8     # 外部函数返回了内部函数,这里返回的内部函数就是闭包
 9     return fun_inner
10 
11 # 创建闭包实例    
12 function = fun_out(1)
13 function(2)
》3 
复制代码

  1.3、如何修改闭包内使用的外部函数的变量

    想要在内部函数中修改外部函数的变量或者是参数需要在内部函数中用nonlocal关键字声明外部函数的变量或者是参数。     

复制代码
   1 #外部函数 
   2 def fun_out():
   3     num1 = 5
   4     #内部函数
   5     def fun_inner(num2) :
   6         #使用nonlocal关键字声明外部函数的变量
   7         nonlocal num1
   8         num1=20
   9         #内部函数使用了外部函数的参数num1
  10         result=num1+num2
  11         print("sum:"result)
  12     return fun_inner                                                                                    
复制代码

闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。

注意点:

  • 由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存。

 

      

 


 

 

                                                                                                                                                                                                                                   

posted @   EF果果  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示