浅谈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语言编写电脑时间自动同步小工具
Mar 08 Python
python任务调度实例分析
May 19 Python
bpython 功能强大的Python shell
Feb 16 Python
pandas带有重复索引操作方法
Jun 08 Python
python实现Flappy Bird源码
Dec 24 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
Python元组知识点总结
Feb 18 Python
django做form表单的数据验证过程详解
Jul 26 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
SONY SRF-40W电路分析
2021/03/02 无线电
php 正则表达式小结
2009/08/31 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
2017/02/28 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Python 编程速成(推荐)
2019/04/15 Python
Python实现Restful API的例子
2019/08/31 Python
Python jieba库用法及实例解析
2019/11/04 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
公司前台接待岗位职责
2013/12/03 职场文书
自主招生推荐信范文
2014/05/10 职场文书
商业项目策划方案
2014/06/05 职场文书
学校宣传标语
2014/06/18 职场文书
白酒营销策划方案
2014/08/17 职场文书
作弊检讨书
2015/01/27 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
办公经费申请报告
2015/05/15 职场文书