闭包

闭包@wiki

示例

    def make_counter():
        i = 0
        def counter(): # counter() is a closure
            nonlocal i
            i += 1
            return i
        return counter

    c1 = make_counter()
    c2 = make_counter()

    print (c1(), c1(), c2(), c2())
    # -> 1 2 1 2

定义

闭包Closure是词法闭包的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

另一种说法,闭包是由函数和及相关的引用环境组合而成的实体。

  • 闭包在运行时可以有多个实例;
  • 不同的引用环境和相同的函数组合可以产生不同的实例

某些语言表现上

在函数中定义另一个函数,如果内部函数引用了外部函数的变量,则可能产生闭包。一旦外部函数被执行,一个闭包就形成。体现为 ...


Cetegories

Pages

Subscribe

RSS

Contacts