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中处理异常的教程
May 24 Python
python中__call__内置函数用法实例
Jun 04 Python
5种Python单例模式的实现方式
Jan 14 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
python万年历实现代码 含运行结果
May 20 Python
Python读写docx文件的方法
May 08 Python
python 命令行传入参数实现解析
Aug 30 Python
python模拟斗地主发牌
Apr 22 Python
python os模块在系统管理中的应用
Jun 22 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Django中Aggregation聚合的基本使用方法
Jul 09 Python
Python grpc超时机制代码示例
Sep 14 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中使用Oracle数据库(6)
2006/10/09 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
html读出文本文件内容
2007/01/22 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
react 创建单例组件的方法
2018/04/26 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python自动生产表情包
2017/03/17 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
微信小程序python用户认证的实现
2019/07/29 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
财务经理的岗位职责
2013/12/17 职场文书
总经理助理职责
2014/02/04 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2015年入党决心书
2015/02/05 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang