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之wxPython应用实例
Sep 28 Python
浅谈Python爬取网页的编码处理
Nov 04 Python
Python实现Linux的find命令实例分享
Jun 04 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
python中删除某个元素的方法解析
Nov 05 Python
python文字转语音实现过程解析
Nov 12 Python
python和go语言的区别是什么
Jul 20 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
用Python将库打包发布到pypi
Apr 13 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
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
银行职员自我鉴定
2014/04/20 职场文书
教研处工作方案
2014/05/26 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
普通话演讲稿
2014/09/03 职场文书
学校党员干部承诺书
2015/05/04 职场文书
投资申请报告
2015/05/19 职场文书
对公司的意见和建议
2015/06/04 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
SpringBoot集成Redis的思路详解
2021/10/16 Redis