当前位置: 首页 > wzjs >正文

做网站有哪些主题玉泉营网站建设

做网站有哪些主题,玉泉营网站建设,实训网站开发目的,网站后台登陆不上去闭包与匿名函数的常见混淆 在编程社区中,闭包(closure)和匿名函数(anonymous function)经常被混为一谈,这种混淆有其历史根源: 历史发展因素:在早期编程实践中,在函数内部定义函数并不常见,直到匿名函数广…

闭包与匿名函数的常见混淆

在编程社区中,闭包(closure)和匿名函数(anonymous function)经常被混为一谈,这种混淆有其历史根源:

  • 历史发展因素:在早期编程实践中,在函数内部定义函数并不常见,直到匿名函数广泛使用后,这种模式才流行起来
  • 概念相关性:只有当涉及嵌套函数时才会出现闭包问题,因此很多开发者是同时接触这两个概念的
  • 语法相似性:许多语言中匿名函数的语法形式恰好也是创建闭包的常见方式

关键区别:匿名函数关注的是函数的命名方式(没有标识符),而闭包关注的是函数对环境的捕获能力(访问定义体外部的非全局变量)。

闭包的核心定义

闭包是指延伸了作用域的函数,这种函数能够访问定义体中引用、但不在定义体中定义的非全局变量。判断闭包的关键要素:

  • 函数不必是匿名的
  • 必须能访问定义体之外的非全局变量
  • 即使在原始作用域消失后仍能保持这些变量的访问

深入理解闭包:移动平均值案例

面向对象实现方案

我们先看一个使用类实现的移动平均值计算器:

class Averager():def __init__(self):self.series  = []def __call__(self, new_value):self.series.append(new_value) total = sum(self.series) return total/len(self.series) # 使用方式 
avg = Averager()
print(avg(10))  # 10.0 
print(avg(11))  # 10.5 
print(avg(12))  # 11.0 

这个实现清晰明了:

  • series 存储在实例属性 self.series 中
  • 通过实现__call__ 方法使实例可调用
  • 状态保持直观可见

函数式闭包实现方案

下面是使用高阶函数和闭包的实现方式:

def make_averager():series = []def averager(new_value):series.append(new_value) total = sum(series)return total/len(series)return averager # 使用方式 
avg = make_averager()
print(avg(10))  # 10.0 
print(avg(11))  # 10.5 
print(avg(12))  # 11.0 

这个实现有几个神奇之处:

  • make_averager() 返回内部函数 averager
  • series 是 make_averager 的局部变量,理论上应在函数结束时消失
  • 但返回的 averager 函数仍然能够访问和修改 series

闭包的魔法解析

当调用 make_averager() 时:

  • 创建局部变量 series 并初始化为空列表
  • 定义嵌套函数 averager,它引用了外部变量 series
  • 返回 averager 函数时,Python 会自动捕获所需的自由变量形成闭包

关键点:闭包会保留定义函数时存在的自由变量的绑定,使得在原始作用域消失后仍能使用这些绑定。

闭包的技术实现细节

我们可以通过Python的内省工具来探查闭包的工作机制:

# 查看函数的自由变量和局部变量 
print(avg.__code__.co_varnames)  # ('new_value', 'total')
print(avg.__code__.co_freevars)  # ('series',)# 查看闭包中存储的具体值 
print(avg.__closure__)  # (<cell at 0x...: list object at 0x...>,)
print(avg.__closure__[0].cell_contents)  # [10, 11, 12]

技术要点解析:

  • code.co_freevars:保存自由变量的名称元组
  • closure:保存实际的变量绑定(cell对象列表)
  • cell_contents:访问cell对象中存储的实际值

闭包的应用价值

  • 状态保持:在不使用全局变量或类的情况下保持状态
  • 装饰器基础:Python装饰器的核心实现机制
  • 回调函数:在事件处理中保持上下文
  • 函数工厂:动态生成具有不同行为的函数
  • 延迟计算:捕获变量供后续计算使用

闭包与类的对比

特性闭包实现类实现
状态存储隐式存储在闭包中显式存储在实例属性中
代码简洁性通常更简洁需要更多样板代码
可读性对不熟悉闭包者较难理解结构清晰,易于理解
扩展性添加新功能较困难通过添加方法容易扩展
性能通常更快方法调用有额外开销

闭包的高级应用:非局部变量

在Python 3中,我们可以使用 nonlocal 关键字显式声明自由变量:

def make_counter():count = 0 def counter():nonlocal count count += 1 return count return counter 

nonlocal 声明表明变量不在当前作用域也不在全局作用域,解决了Python 2中不能修改闭包变量的限制。

闭包的注意事项

  • 内存消耗:闭包会延长捕获变量的生命周期
  • 循环引用:可能导致意外的内存泄漏
  • 可调试性:闭包中的状态不如类属性直观
  • Python 2限制:不能修改闭包中的变量(除非是可变对象)

总结

闭包是函数式编程中的强大工具,它允许函数捕获并携带其定义环境的部分状态。理解闭包的关键在于认识到函数不仅仅是代码,还包含其创建时的上下文环境。这种能力使得我们可以编写更加灵活和表达力强的代码,特别是在需要保持状态但又想避免使用全局变量或类的情况下。

闭包的概念虽然在初学阶段可能有些难以理解,但一旦掌握,它将大大扩展你解决问题的工具箱,让你能够编写出更加优雅和高效的Python代码。


文章转载自:

http://KRUnKcDg.mhmsn.cn
http://RRNKJf7F.mhmsn.cn
http://d1EeBC3G.mhmsn.cn
http://a0IC3MAr.mhmsn.cn
http://ruBbGNNF.mhmsn.cn
http://CYKu6NH7.mhmsn.cn
http://QVTmqILP.mhmsn.cn
http://cc2yo0hp.mhmsn.cn
http://xj4obdVt.mhmsn.cn
http://kgiUbd0P.mhmsn.cn
http://yCVMkQ3G.mhmsn.cn
http://bcKKMQ8i.mhmsn.cn
http://eGGxUVlL.mhmsn.cn
http://lbvPVEew.mhmsn.cn
http://gEpGKLN8.mhmsn.cn
http://ghYzBqvZ.mhmsn.cn
http://SlnYirBa.mhmsn.cn
http://bW8vIfmz.mhmsn.cn
http://GJufvT0y.mhmsn.cn
http://ovsMJG7w.mhmsn.cn
http://YwPprKhI.mhmsn.cn
http://pUNUVMBA.mhmsn.cn
http://nc06K4cd.mhmsn.cn
http://qMn279xL.mhmsn.cn
http://j3haiKtu.mhmsn.cn
http://D4RB4rXn.mhmsn.cn
http://psZ7PeCg.mhmsn.cn
http://GGptS3D1.mhmsn.cn
http://3cGxmKIj.mhmsn.cn
http://8cyTDFVw.mhmsn.cn
http://www.dtcms.com/wzjs/729480.html

相关文章:

  • wordpress 热门插件台州网站建设seo
  • 蒙自建设网站电子商务网站建设需要做好哪些准备
  • 网站建设外包公司排名品牌推广渠道有哪些
  • wordpress新建用户组seo网站关键词优化多少钱
  • 商丘企业网站服务厦门建设网站的
  • ipad网站制作长春网站建设机构
  • 旅游网站开发 目的及必要性北京网站建设培训
  • 网站建设需求文档模版网上做论文的网站有哪些
  • 企业网站整合地图标注申请入口免费
  • 目前玩的人最多网游排行榜网站seo模块
  • 网站首页背景图片企业建设厂房需要办哪些证
  • 徐水住房建设局网站附近那里有做网站的
  • 网站如何做外部链接为什么要给大夫做网站
  • 郑州专业做网站企业百度一下百度搜索官网
  • 自己做网站不用WordPress网站建设负责传资料不
  • 徐州市城乡和城乡建设厅网站首页深圳百度网站优化
  • 营销型网站的建设重点是什么led的网站建设
  • 互联网公司网站wordpress 插件作用
  • 网站优化自已做还是请人做网站做留言板怎么清空源码
  • 大型网站建设兴田德润简介网站后台程序开发
  • 网站建设责任分工敦化市建设局网站
  • 制作网站要花多少钱如何深圳工程建设公司
  • 建旅游网站的意义徐东做网站
  • wordpress网站更改不见淘宝网官方网站免费下载
  • 网站备案是一年一次吗以net结尾的网站
  • wordpress新站不收录网络优化的工作内容
  • 做外贸有哪些免费的网站有哪些网站建设 $ 金手指排名效果好
  • 关于销售网站建设的短文石柱土家族网站建设
  • 快手自媒体平台昆明网站排名优化公司
  • 建设商务网站的方案金华网站建设公司哪家好