为什么要使用闭包

闭包避免了使用全局变量,此外,闭包允许将函数与其所操作的某些数据(环境)关连起来。这一点与面向对象编程是非常类似的,在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。

一般来说,当对象中只有一个方法时,这时使用闭包是更好的选择。来看一个例子:

def adder(x):def wrapper(y): return x + y return wrapper adder5 = adder(5) # 输出 15 adder5(10) # 输出 11 adder5(6) 

这比用类来实现更优雅,此外装饰器也是基于闭包的一中应用场景。

所有函数都有一个 __closure__属性,如果这个函数是一个闭包的话,那么它返回的是一个由 cell 对象 组成的元组对象。cell 对象的cell_contents 属性就是闭包中的自由变量。

>>> adder.__closure__
>>> adder5.__closure__ (<cell at 0x103075910: int object at 0x7fd251604518>,) >>> adder5.__closure__[0].cell_contents 5 

这解释了为什么局部变量脱离函数之后,还可以在函数之外被访问的原因的,因为它存储在了闭包的 cell_contents中了。

转载于:https://www.cnblogs.com/bonelee/p/11581303.html

python为什么要使用闭包相关推荐

  1. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

  2. 一篇文章解决Python函数式编程与闭包的问题

    函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...

  3. 三分钟理解Python函数式编程与闭包

    函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...

  4. Python基础15-函数闭包与装饰器

    目录 装饰器概念 装饰器的实现 修改被装饰函数的代码(非装饰器实现) 修改被装饰函数的调用方式(非装饰器实现) 装饰器的实现(不完整的实现level1) 装饰器实现的语法糖(不完整的实现level2) ...

  5. Python源码学习:Python函数浅析-函数闭包

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇分析了函数参数的分析后,本文分析函数闭包的实现.函数闭包即函数定义和函数表达式 ...

  6. python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...

    一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...

  7. Python入门笔记之闭包

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一段代码: def sum_test(lst):def lazy_sum():return sum(lst)retu ...

  8. python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...

    一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰 ...

  9. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  10. python函数作用域与闭包_python基础-08-内置函数、作用域、闭包、递归

    python基础-内置函数.作用域.闭包.递归 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins__)) 常见函数 type() 数据类型 print() ...

最新文章

  1. 初具雏形的UL标准侧重于自主车辆的安全性
  2. java本地方法封装库_JNA-Java本地方法封装库
  3. Bellman-Ford算法——为什么要循环n-1次?图有n个点,又不能有回路,所以最短路径最多n-1边。又因为每次循环,至少relax一边所以最多n-1次就行了!...
  4. 公众号微信支付ios和android,【微信支付】
  5. php ci url,URL路由设置-CI(codeigniter)PHP框架再探
  6. python制作点亮图片_MicroPython拼插编程实例:点亮心形8x8点阵
  7. Qt学习笔记-使用shape() 使得碰撞更加精确
  8. Python+BI爬取3000条车厘子数据,发现了这些秘密
  9. python读音有道-python爬虫之有道在线翻译
  10. [python] 对于arcpy的简单使用。
  11. 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
  12. 苹果每部iPhone4S可赚3917元 开售首日收入39亿元
  13. 移动端 --- 解决苹果手机滑动卡顿的问题
  14. 【SAP】ABAP开发——ALV展示后字段的下划线连接
  15. C++-图像目标区裁剪ImageCropping
  16. RecycleView简介及基本使用
  17. 夯实Java基础(面向对象)
  18. 格子玻尔兹曼方法(LBM)计算中的无量纲化转化(将物理参数转化为格子参数)
  19. 计算机er应该选择保研还是出国?
  20. 成都影创入选成都新经济百家重点培养企业名单

热门文章

  1. qt c语言程序运行时间,c – 在Qt中计时事件的最佳方法
  2. docker设置网络
  3. Lua和C语言的交互——C API
  4. python类定义的讲解_python类定义的讲解
  5. win10右键闪退到桌面_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
  6. 基于单片机的超市储物柜设计_基于51单片机对电子储物柜系统的设计
  7. 安师大计算机与信息学院导师,安徽师范大学数学计算机科学学院导师介绍:罗永龙...
  8. httpservletrequest_javax.servlet.http.HttpServletRequest报错
  9. python两个乘号_Python小白入门:第一讲||变量和简单数据类型
  10. c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...