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文件和目录操作方法大全(含实例)
Mar 12 Python
python比较2个xml内容的方法
May 11 Python
深入浅析python定时杀进程
Jun 06 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
Python 实现交换矩阵的行示例
Jun 26 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Django 解决由save方法引发的错误
May 21 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python map及filter函数使用方法解析
Aug 06 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
php中adodbzip类实例
2014/12/08 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
浅析Python函数式编程
2018/10/06 Python
Python之pymysql的使用小结
2019/07/01 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
Keras设置以及获取权重的实现
2020/06/19 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
工作自我评价怎么写
2014/01/29 职场文书
2014年应急工作总结
2014/12/11 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
学雷锋倡议书
2015/01/19 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫