让知识连接你我
投稿赚钱
当前位置: 首页 > 后端开发 > python中的闭包?如何理解闭包?
  • 101
  • 微信分享

    扫一扫,在手机上查看

python中的闭包?如何理解闭包?

2019.09.18 10:00 274 浏览 举报

  闭包并不一定那些稀奇的理解,它早就在程序设计语言逐渐成长的时期就出现了。闭包(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);
    }
}


本文首次发布于开创者素材 ,转载请注明出处,谢谢合作!

相关文章推荐