`
dalviker
  • 浏览: 35227 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

转 python 闭包的说明

阅读更多

引自 http://www.fuzhijie.me/?p=211

我感觉闭包和函数对象本质上是同一种东西,闭包是函数对象的简化。闭包将环境数据保存在func_closure中,函数对象则将相关数据保存在对象中。二者均可用于filter、map、reduce等函数中。

在IBM dW有篇文章讲闭包的概念,上面讲支持闭包的语言有这样的特性:
1、函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。
2、函数可以嵌套定义,即在一个函数内部可以定义另一个函数。

显然Python对这两个特性支持都非常好,Java要想支持闭包改动就有点大了。在Python中函数同类差不多,而在Java中类是最小的组织单元,目前JDK 6.0上面两个特性一个都不支持。至于C++这样更底层的语言要支持闭包估计是不可能的。

另一个文章说
“另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。比如参考资源中就有这样的的定义:在实现深约束时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。”
看着更严格些。

分享到:
评论

相关推荐

    Python的几个高级语法概念浅析(lambda表达式闭包装饰器)

    本文主要记录自己对几个高级语法概念的理解:匿名函数、lambda表达式、闭包、装饰器。这几个概念并非Python特有,但本文只限于用Python做说明

    Python中的闭包和装饰器

    python命名空间就是作用域表现的原因,这里我简要说明一下。 引入命名空间的主要原因还是为了避免变量冲突,因为python中的模块众多,模块中又有函数,类等,它们都要使用到变量。 但如果每次都要注意不和其他...

    Python中的闭包实例详解

    一般来说闭包这个概念在很多语言中都有涉及,本文主要谈谈python中的闭包定义及相关用法。Python中使用闭包主要是在进行函数式开发时使用。详情分析如下: 一、定义 python中的闭包从表现形式上定义(解释)为:如果...

    闭包的使用.pdf

    讲解Python的闭包概念,并且说明在python中如何实现 闭包,以及使用闭包有哪些方法和手段,最后介绍下python中应用装饰器的场 景。

    深入理解python中的闭包和装饰器

    python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。 以下说明主要针对 python2.7,其他版本可能存在...

    python装饰器使用实例详解

    主要应用了python闭包的概念,现在用1个小例子说明 import time def foo(): time.sleep(1) def bar(): time.sleep(2) def show_time(f): def inner(): start_time = time.time() f() end_time = time.time

    Python中的作用域规则详解

    接下来会谈论Python的作用域规则,在这中间也会说明一下Python与C在作用域方面的不同。 在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域;在Python 2.2中,Python正式...

    实例讲解Python的函数闭包使用中应注意的问题

    昨天正当我用十成一阳指功力戳键盘、昏天暗地coding的时候,正好被人问了一个问题,差点没收好功,洪荒之力侧漏震伤桌边的人,废话不多说,先上栗子(精简版,只为说明问题): from functools import wraps from ...

    Python UnboundLocalError和NameError错误根源案例解析

    如果遇到这这种类型的错误,说明我们对python中变量引用相关部分有不当的认识和理解。而这又是对理解python相关概念比较重要的。这也是本文写作的原因。  本文为理解闭包相关概念的做铺垫,后续会详细深入的整理出...

    Java面向对象程序设计大作业基于离散数学的关系和相关计算源码,带GUI图形界面,含关系,性质判断,闭包求取,映射判断等运算

      程序包括关系,性质判断,闭包求取,映射判断,关系判定,等价关系划分,偏序关系求极值等运算。使用GUI图形界面与用户进行交互操作,为了更好的用户使用体验,实现了输入集合容错性判断和对话框提示等

    leetcode分类-leetcode:Python中的LeetCode问题

    一些题目用了闭包的方法来避免使用类 一些必须用类的保持依旧使用类 _solve, _solve1 等代表不同方式的 solution 提交 LeetCode 运行的时候仅需提交函数后的一部分,注意缩进 大部分 solution 下都包含几种题解 一般...

    从局部变量和全局变量开始全面解析Python中变量的作用域

    理解全局变量和局部变量 1.定义的函数内部的变量名...说明函数中定义的变量名num是一个局部变量,覆盖全局变量。再例如: num = 100 def func(): num += 100 print num func() 输出结果是:UnboundLocalError: l

    python中的装饰器和递归函数

    装饰器的本质就是一个闭包,是一个返回内部函数的高阶函数。它使我们在不修改原函数代码的情况下为原函数增加性的功能。 1.1.基本装饰器 我们下面来举例说明装饰器的写法和用法。下面我们利用装饰器为hope()函数增加...

    freemarker总结

    <#if animals.python.price Pythons are cheaper than elephants today. Pythons are not cheaper than elephants today. </#if> 2、 switch , case , default , break指令 这些指令显然是分支...

Global site tag (gtag.js) - Google Analytics