Python中的闭包详细介绍和实例


Posted in Python onNovember 21, 2014

一、闭包

来自wiki:

闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

在一些语言中,在函数中定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。

闭包的用途:

因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。
多个函数可以使用一个相同的环境,这使得它们可以通过改变那个环境相互交流。

来自baidu百科:

闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。

二、python中闭包

实例:

def make_counter():

    count = 0

    def counter():

        nonlocal count

        count += 1

        return count

    return counter

    

def make_counter_test():

  mc = make_counter()

  print(mc())

  print(mc())

  print(mc())

三、lamada

实例:

def f(x):

    return x**2
print f(4)
g = lambda x : x**2

print g(4)

Python中的lambda真的没有用武之地吗?其实不是的,至少我能想到的点,主要有:

1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。

Python 相关文章推荐
python中的对象拷贝示例 python引用传递
Jan 23 Python
python实现2048小游戏
Mar 30 Python
python实现的文件同步服务器实例
Jun 02 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
python try except 捕获所有异常的实例
Oct 18 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
如何通过python实现人脸识别验证
Jan 17 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 #Python
python多进程操作实例
Nov 21 #Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 #Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 #Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 #Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 #Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 #Python
You might like
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP多进程编程实例
2014/10/15 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
使用vue构建多页面应用的示例
2020/10/22 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
一个C/C++编程面试题
2013/11/10 面试题
四好少年事迹材料
2014/01/12 职场文书
财务会计求职信范文
2015/03/20 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS