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);
    }
}
    原文作者:edisonlz
    原文地址: https://segmentfault.com/a/1190000000344681
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞