浅谈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 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
深入了解Django View(视图系统)
Jul 23 Python
对python while循环和双重循环的实例详解
Aug 23 Python
Python hashlib模块加密过程解析
Nov 05 Python
python cv2截取不规则区域图片实例
Dec 21 Python
Python中私有属性的定义方式
Mar 05 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
vscode+PyQt5安装详解步骤
Aug 12 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中的array数组类型分析说明
2010/07/27 PHP
学习php分页代码实例
2013/10/24 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
前端性能优化及技巧
2016/05/06 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
python字符串string的内置方法实例详解
2018/05/14 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Keras设置以及获取权重的实现
2020/06/19 Python
物流创业计划书
2014/02/01 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
网络管理员岗位职责
2015/02/12 职场文书
消费者投诉书范文
2015/07/02 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
DIY胆机必读:各国电子管评价
2022/04/06 无线电
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS