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 14 Python
给Python初学者的一些编程技巧
Apr 03 Python
给Python入门者的一些编程建议
Jun 15 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Windows下python3.6.4安装教程
Jul 31 Python
python爬取微信公众号文章
Aug 31 Python
Python 变量类型详解
Oct 10 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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实现mysql同步的实现方法
2009/10/21 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
php数据访问之增删改查操作
2016/05/09 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
基于Python代码编辑器的选用(详解)
2017/09/13 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
对python调用RPC接口的实例详解
2019/01/03 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
python实现银行实战系统
2020/02/26 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
css sprite简单实例
2016/05/23 HTML / CSS
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
教师求职信范文分享
2013/12/27 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
干部外出学习心得体会
2016/01/18 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python