浅谈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 open读写文件实现脚本
Sep 06 Python
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
Python httplib模块使用实例
Apr 11 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Python实现快速计算词频功能示例
Jun 25 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
用Python简陋模拟n阶魔方
Apr 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 分页类 扩展代码
2009/06/11 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
javascript模拟命名空间
2015/04/17 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
python函数形参用法实例分析
2015/08/04 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
医药工作岗位求职信分享
2013/12/31 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
自我推荐信格式模板
2015/03/24 职场文书
交通事故代理词范文
2015/05/23 职场文书
党员证明信
2015/06/19 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android