浅谈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中用于检查英文字母大写的isupper()方法
May 19 Python
python入门教程之识别验证码
Mar 04 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 Python
2021年最新用于图像处理的Python库总结
Jun 15 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
装修致歉信
2014/01/15 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫