浅谈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操作MySQL数据库的方法分享
May 29 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python random从集合中随机选择元素的方法
Jan 23 Python
python几种常用功能实现代码实例
Dec 25 Python
python关于调用函数外的变量实例
Dec 26 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
一个入门级python爬虫教程详解
Jan 27 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
python简单实现AES加密和解密
2019/03/28 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
技术经理的自我评价范文
2013/12/03 职场文书
办公室经理岗位职责
2014/01/01 职场文书
企业贷款委托书格式
2014/09/12 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
留学推荐信英文范文
2015/03/26 职场文书
母亲节主题班会
2015/08/14 职场文书
初中英语教学反思范文
2016/02/15 职场文书