`

python 中的闭包

阅读更多
什么是闭包?
闭包并不是什么新奇的概念,它早在高级语言开始发展的年代就产生了。闭包(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);
	}
}



分享到:
评论
2 楼 aninfeel 2011-03-29  
和js一样啊
1 楼 fanfq 2011-03-23  
没看明白

相关推荐

    python中闭包共4页.pdf.zip

    Python中的闭包是一种重要的编程概念,它涉及到函数、作用域和引用等核心概念。闭包在Python编程中扮演着至关重要的角色,特别是在处理高阶函数、数据封装和异步编程等场景。以下是对闭包的详细解释: 1. **闭包的...

    Python闭包:深入理解与应用场景解析.zip

    Python闭包是编程语言中的一种高级特性,它在函数式编程和面向对象编程中都扮演着重要的角色。在Python中,闭包是指一个内嵌函数(nested function)对其外部作用域变量的引用,即使外部函数已经执行完毕,闭包依然...

    python中闭包Closure函数作为返回值的方法示例

    在Python编程语言中,闭包(Closure)是一种高级特性,它涉及到函数作为返回值的使用。闭包在函数式编程中扮演着重要角色,因为它们能够捕获并存储外部作用域内的变量,即使这些变量在闭包定义后不再存在。在Python...

    python高阶闭包练习题

    3. **非局部变量**:使用`nonlocal`关键字可以声明一个变量为非局部变量,这在闭包中尤其有用,因为它允许内部函数修改外部函数的变量。 4. **闭包作为返回值**:函数可以返回一个闭包,这个闭包保留了对外部函数...

    Python中的闭包总结

    在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由...

    Python闭包实例closure.py

    Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用

    Python中闭包的用法

    闭包 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数块+引用...我们注意到一个问题:内嵌函数 inner 中引用到外层函数中的局部变量num,Python解释器会这么处理这个问题呢? 先让我们来看看这段代码的

    python中的闭包函数

    在闭包中,即使外部函数已经返回,内部函数仍然可以访问外部函数的局部变量。这是因为Python使用了“延迟绑定”的方式,在定义函数时并不进行变量查找,而是在函数被调用时才查找变量。由于内部函数持有对外部函数...

    Python函数中的函数(闭包)用法实例

    本文实例讲述了Python闭包的用法。分享给大家供大家参考,具体如下: Python函数中也可以定义函数,也就是闭包。跟js中的闭包概念其实差不多,举个Python中闭包的例子。 def make_adder(addend): def adder(augend...

    知识笔记:Python高阶技巧(十二)

    内容概要:本文深入介绍了Python中闭包、装饰器、property、上下文管理和深浅拷贝等多个高级概念。首先讲解了闭包的基本原理及其应用场景,强调了闭包能够封装和保护变量的作用;接着详细解读了装饰器的概念、分类...

    深入理解Python中的闭包

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

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

    问题在于,当`wrapped_function`尝试修改`retry_times`时,由于Python的作用域规则,它会尝试创建一个新的局部变量`retry_times`,而不是引用闭包中的那个。因此,如果在修改`retry_times`之前没有初始化,就会出现`...

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

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

    简析Python的闭包和装饰器

    在Python 3中,为了在闭包中修改外部变量,我们可以使用`nonlocal`关键字。与`global`不同,`nonlocal`不会查找全局变量,而是搜索外部函数的变量,确保我们能够安全地操作那些非局部但也不是全局的变量。 至于闭包...

    Python closure闭包解释及其注意点详解

    在Python编程语言中,闭包(closure)是一种常见的概念,它涉及到函数和作用域,经常会在代码中扮演重要角色。理解闭包及其相关注意事项,对于编写高效、正确的Python代码来说至关重要。本文档详细解释了闭包的概念...

    简单谈谈Python中的闭包

    在Python编程语言中,闭包是一种特殊的函数,它包含了对自由变量的引用,即使这些变量在定义时所在的外部作用域已经不再存在。简单来说,闭包是由一个内嵌函数(内部函数)和其引用的外部函数(外部作用域)中的变量...

Global site tag (gtag.js) - Google Analytics