浅谈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中的多线程编程
Apr 09 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
详解python配置虚拟环境
Apr 08 Python
pandas 层次化索引的实现方法
Jul 06 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
Python+Redis实现布隆过滤器
Dec 08 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
python 监控logcat关键字功能
Sep 04 Python
利用python爬取有道词典的方法
Dec 08 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
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php教程之phpize使用方法
2014/02/12 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
prototype1.4中文手册
2006/09/22 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python使用Matplotlib画条形图
2020/03/25 Python
python构建基础的爬虫教学
2018/12/23 Python
python交互界面的退出方法
2019/02/16 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
Python中的全局变量如何理解
2020/06/04 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
大学生在校学习的自我评价
2014/02/18 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
大明湖导游词
2015/02/03 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python