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之一个免费的实验室
Sep 14 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
Python使用正则实现计算字符串算式
Dec 29 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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 获取完整url地址
2008/12/20 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python学习小技巧之列表项的排序
2017/05/20 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python使用turtle绘制分形树
2018/06/22 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
Python构建图像分类识别器的方法
2019/01/12 Python
使用python接入微信聊天机器人
2020/03/31 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
应届生法律求职信
2013/10/22 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
68句权威创业名言
2019/08/26 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang