浅谈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实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
如何实现Django Rest framework版本控制
Jul 25 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
python递归下载文件夹下所有文件
Aug 31 Python
python3爬取torrent种子链接实例
Jan 16 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
python实现简单文件读写函数
Feb 25 Python
Python与C++中梯度方向直方图的实现
Mar 17 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判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
xml和web特殊字符
2009/04/28 Javascript
理解Javascript闭包
2013/11/01 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
学生会干部自荐信
2014/02/04 职场文书
2014年宣传工作总结
2014/11/18 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python