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中的元类(metaclass)
Feb 14 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
python制作一个桌面便签软件
Aug 09 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
python 从csv读数据到mysql的实例
Jun 21 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
详解python中eval函数的作用
Oct 22 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 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区块查询实现方法分析
2018/05/12 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python创建xml的方法
2015/03/10 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
python 列表降维的实例讲解
2018/06/28 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Django中modelform组件实例用法总结
2020/02/10 Python
windows下python安装pip方法详解
2020/02/10 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
学前教育学生自荐信范文
2013/12/31 职场文书
大型营销活动计划书
2014/04/28 职场文书
房地产端午节活动方案
2014/08/24 职场文书
初级党校心得体会
2014/09/11 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
超市督导岗位职责
2015/04/10 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server