Python闭包实现

闭包

  在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
  在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。其中所引用的变量称作上值(upvalue)。

  Python语言设计遵循一个核心的作用域规则--最内嵌套作用域规则,而闭包则是这个规则的一种实现方式。规则是形而上的“道”,闭包则是形而下的“器”。

# closure.py

def get_func():
    value = 'inner'
    def inner_func():
        print(value)
    return inner_func

show_value = get_func()
show_value()

# the output is 'inner'

  在Python中,闭包的实现机制和PyCodeObjectPyFrameObjectPyFunctionObject三个结构体都有分不开的关系。

闭包的实现

创建闭包

使用闭包