浅谈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遍历C盘dll文件的方法
May 06 Python
分享一个简单的python读写文件脚本
Nov 25 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
python线程池threadpool使用篇
Apr 27 Python
Sanic框架应用部署方法详解
Jul 18 Python
numpy中loadtxt 的用法详解
Aug 03 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
Python包和模块的分发详细介绍
Jun 19 Python
python 数据类型强制转换的总结
Jan 25 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
Symfony生成二维码的方法
2016/02/04 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
js面向对象的写法
2016/02/19 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
工作失误检讨书范文大全
2014/01/13 职场文书
初中校园广播稿
2014/02/02 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
财务情况说明书范文
2014/05/06 职场文书
个人授权委托书范文
2014/09/21 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
导游词之张家口
2019/12/13 职场文书
python OpenCV学习笔记
2021/03/31 Python
JavaScript流程控制(分支)
2021/12/06 Javascript