浅谈Python中的闭包


Posted in Python onJuly 08, 2015

Python中的闭包的概念, 在我看来, 就相当于在某个函数中又定义了一个或多个函数, 内层函数定义了具体的实现方式, 而外层返回的就是这个实现方式, 但并没有执行, 除非外层函数调用的内层的实现方法被执行了。至于这个怎么执行, 看下面的例子就知道了

比如:

def sum_outer(x, y):
  def sum_in(z):
    return x + y - z;
  return sum_in #注意, 这里返回的不是sum_in() 只是sum_in的函数名

 m = sum_outer(3, 4) #3, 4 分别对应x, y,这里的m返回的也只是函数sum_in的定义,<function __main__.sum_in>
 print m(5) # m对应z, 这个时候才是真正sum_in执行的时候

看起来就像通过sum_outer 调用了内层的sum_in函数, 多了层代理

其中一种应用场景就是可以根据不同的参数,使用相同的实现去返回对应不同的结果,比如, 根据不同的配置获取不同的数据库连接, 或者要求在验证字符串长度时, 可以根据不同的最大长度验证(外层传递最大长度, 内层传递验证的字符串)。

在抽象化一点, 外层定义了一个环境, 内层则是在该环境中的要做的事情, 但这个事情还没做,
只是要做。当真正需要做的时候到这个环境中去做了就好了(外层的返回结果(m)执行内层的函数sum_in)
实际上, 直接给函数传递需要的所有参数, 直接返回结果, 如上面的sum_outer和sum_in, 直接通过

def sum(x,y,z):
  return x + y - z

不就结了吗,为社么还要闭包这个实现呢? 到目前来说, 只能看出他们是两种不同的实现方式, 更多的区别, 还有待日后的学习体验

以上所述就是本文的全部内容了,希望大家能够喜欢。

Python 相关文章推荐
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python yield 使用方法浅析
May 20 Python
python中关于for循环的碎碎念
Jun 30 Python
Python标准库之itertools库的使用方法
Sep 07 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
Python实现使用request模块下载图片demo示例
May 24 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Python编程super应用场景及示例解析
Oct 05 Python
Python中atexit模块的基本使用示例
Jul 08 #Python
python登录豆瓣并发帖的方法
Jul 08 #Python
python发送HTTP请求的方法小结
Jul 08 #Python
python友情链接检查方法
Jul 08 #Python
Python抓取百度查询结果的方法
Jul 08 #Python
Python抓取淘宝下拉框关键词的方法
Jul 08 #Python
Python根据区号生成手机号码的方法
Jul 08 #Python
You might like
PHP四舍五入精确小数位及取整
2014/01/14 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
pycharm安装图文教程
2017/05/02 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
django-filter和普通查询的例子
2019/08/12 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
python基于openpyxl生成excel文件
2020/12/23 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
SQL数据库笔试题
2016/03/08 面试题
外贸学院会计专业应届生求职信
2013/11/14 职场文书
工作疏忽检讨书
2014/01/25 职场文书
会议活动邀请函
2014/01/27 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
python元组打包和解包过程详解
2021/08/02 Python
python实现简单的三子棋游戏
2022/04/28 Python