什么是闭包?
闭包并不是什么新奇的概念,它早在高级语言开始发展的年代就产生了。闭包(Closure)是词法闭包(Lexical Closure)的简称。对闭包的具体定义有很多种说法,这些说法大体可以分为两类:
一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量(注 1)的函数。
另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。比如参考资源中就有这样的的定义:在实现深约束(注 2)时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。
#python 中的闭包
... def func(data):
... count = [data]
... def wrap():
... count[0] += 1
... return count[0]
... return wrap
...
... a = func(1)
>>> a()
5: 2
>>> a()
6: 3
def func(x):
... return lambda y :y+x
>>> b = func(1)
>>> b(1)
7: 2
>>> b(2)
8: 3
>>> print b #这里b是个function 在ruby中是proc
<function <lambda> at 0x01AC68F0>
def addx(x):
... def adder (y): return x + y
... return adder
>>> add8 = addx(8)
>>> add8(8)
9: 16
#ruby 中的闭包
# Creates a new <code>Proc</code> object, bound to the current
# context. <code>Proc::new</code> may be called without a block only
# within a method with an attached block, in which case that block is
# converted to the <code>Proc</code> object.
#
sum = 0
10.times{|n| sum += n}
print sum
def upto(from,to)
while from <= to
yield from
from+=1
end
end
upto(1,10) {|n| puts n}
def counter()
i = 1
Proc.new{ puts i;i+=1}
end
c = counter()
c.call() 1
c.call() 2
/*javascript中的闭包*/
function f1(){
n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
//用途 setInterval 传参数
function do_load_stock(market,code)
{
return function(){load_stock(market,code)};
}
function time_loader(market,code)
{
var stock = market+code;
if(CheckStockTime(stock))
{
setInterval(do_load_stock(market,code),30000);
}
}
分享到:
相关推荐
python中闭包共4页.pdf.zip
闭包(closure)是函数式编程的重要的语法结构,Python也支持这一特性,下面这篇文章主要给大家介绍了关于python中闭包Closure函数作为返回值的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
python高阶闭包练习题
在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由...
Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用
闭包 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数块+引用...我们注意到一个问题:内嵌函数 inner 中引用到外层函数中的局部变量num,Python解释器会这么处理这个问题呢? 先让我们来看看这段代码的
本文实例讲述了Python闭包的用法。分享给大家供大家参考,具体如下: Python函数中也可以定义函数,也就是闭包。跟js中的闭包概念其实差不多,举个Python中闭包的例子。 def make_adder(addend): def adder(augend...
主要介绍了python中的闭包用法,以实例形式详细分析了Python中闭包的概念及相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
里我们来以实例讲解Python的函数闭包使用中应注意的问题,主要针对闭包后新生成的变量来不及初始化而导致找不到变量的错误出现,需要的朋友可以参考下
主要为大家详细介绍了Python的闭包和装饰器,何为闭包?何为装饰器?感兴趣的小伙伴们可以参考一下
主要介绍了Python closure闭包解释及其注意点详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print(hello world in foo) def bar(): print(hello world in bar) 此时...
理解函数概念和闭包的语法特点 掌握装饰器函数的应用场景和特点、语法 能够实现装饰器函数 装饰有任意函数参数、返回值 了解类装饰器形式、理解可调用对象的概念 能够掌握装饰器带参数-装饰器工厂的意义和特点 理解...
主要介绍了python中闭包的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被称为闭包...
一般来说闭包这个概念在很多语言中都有涉及,简单说,闭包就是根据不同的配置信息得到不同的结果,下面我们来专门讲下在Python中的闭包
本文实例讲述了Python闭包实现计数器的方法。分享给大家供大家参考。具体实现方法如下: 先来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将...