浅谈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 正则表达式(转义问题)
Dec 15 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
Python输出各行命令详解
Feb 01 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
Python生成器next方法和send方法区别详解
May 30 Python
Keras 使用 Lambda层详解
Jun 10 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
PHP 高手之路(二)
2006/10/09 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
Yii核心验证器api详解
2016/11/23 PHP
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python实现一次创建多级目录的方法
2015/05/15 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
在Django中实现添加user到group并查看
2019/11/18 Python
详解python tkinter模块安装过程
2020/01/06 Python
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
人事档案接收函
2014/01/12 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
工程管理英文求职信
2014/03/18 职场文书
小学教师自我评价
2015/03/04 职场文书
教师节随笔
2015/08/15 职场文书
高一数学教学反思
2016/02/18 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
女性励志书籍推荐
2019/08/19 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS