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的ORM框架SQLObject入门实例
Apr 28 Python
详解Python中expandtabs()方法的使用
May 18 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
python 定时器,轮询定时器的实例
Feb 20 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
python 3.8.3 安装配置图文教程
May 21 Python
python如何写try语句
Jul 14 Python
Python实现播放和录制声音的功能
Aug 12 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 执行系统命令的方法
2009/07/07 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
异步加载script的代码
2011/01/12 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python实现简单图片物体标注工具
2019/03/18 Python
python文件写入write()的操作
2019/05/14 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
python的help函数如何使用
2020/06/11 Python
应届生骨科医生求职信
2013/10/31 职场文书
前台领班岗位职责
2013/12/04 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
组织关系转移介绍信
2014/01/16 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
鲁冰花观后感
2015/06/10 职场文书
美容院管理规章制度
2015/08/05 职场文书
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python