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里隐藏的“禅”
Jun 16 Python
Python中类型关系和继承关系实例详解
May 25 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Python整数对象实现原理详解
Jul 01 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python实现aes加密解密多种方法解析
May 15 Python
Django Path转换器自定义及正则代码实例
May 29 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
python分分钟绘制精美地图海报
Feb 15 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
jQuery.each使用详解
2015/07/07 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
js实现点击按钮复制文本功能
2020/07/20 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python切片索引用法示例
2018/05/15 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
使用Python实现牛顿法求极值
2020/02/10 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
三好学生自我鉴定
2013/12/17 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
课例研修方案
2014/05/31 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
听证通知书
2015/04/24 职场文书
国庆阅兵观后感
2015/06/15 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
python办公自动化之excel的操作
2021/05/23 Python
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python