浅谈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中请使用isinstance()判断变量类型
Aug 25 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
Windows下PyMongo下载及安装教程
Apr 27 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
python3实现域名查询和whois查询功能
Jun 21 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 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图片是否为动画的方法
2020/09/04 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
解决python3中cv2读取中文路径的问题
2018/12/05 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
React实现动效弹窗组件
2021/06/21 Javascript
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
Java中的Kotlin 内部类原理
2022/06/16 Java/Android