随笔 - 86  文章 - 5  评论 - 11  阅读 - 10万 

1、如何构成闭包?

  如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。

2、什么是自由变量?
  定义在外层函数中但由内层函数使用的变量被称为自由变量。
 
3、概述、什么是闭包。
  闭包是一种特殊情况,外层函数在结束时会发现其定义的局部变量将来会在内层函数中使用,此时外层函数就会把这些自由变量绑定到内层函数。
  所谓闭包,实际上就是将内层函数的代码以及自由变量(外层函数定义、但会由内层函数使用)打包在一起
 
4、闭包代码示例
复制代码
 def outer(x): #定义函数outer 
     y=10 #定义局部变量y并赋为10 
     def inner(z): #在outer函数中定义 #嵌套函数inner 
         nonlocal x,y #nonlocal声明 
         return x+y+z #返回x+y+z的结果 
     return inner #返回嵌套函数inner的引用 
 f=outer(5) #将返回的inner函数赋给f 
 g=outer(50) #将返回的inner函数赋给g
 print('f(20)的值为:', f(20)) 
 print('g(20)的值为:', g(20)) 
 print('f(30)的值为:', f(30)) 
 print('g(30)的值为:', g(30))
复制代码

输出:f(20)的值为: 35

   g(20)的值为: 80
   f(30)的值为: 45
   g(30)的值为: 90
 
提示:闭包的主要作用在于可以封存函数执行的上下文环境。例如,通过两次调用outer函数形成了两个闭包,这两个闭包具有相互独立的上下文环境(一个闭包中x=5、y=10,另一个闭包中x=50、
y=10),且每个闭包可多次调用。
posted on   史振兴  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示