Python关闭
示例
Python中的闭包是通过函数调用创建的。在此,makeInc为x函数创建绑定的调用在函数内部引用inc。每次调用makeInc都会创建此函数的新实例,但是每个实例都有一个指向的不同绑定的链接x。
def makeInc(x): def inc(y): # x is "attached" in the definition of inc return y + x return inc incOne = makeInc(1) incFive = makeInc(5) incOne(5) #返回6 incFive(5) #返回10
请注意,在常规关闭中,封闭函数从其封闭环境中完全继承了所有变量,但在此构造中,封闭函数仅对继承的变量具有读取权限,但无法对其进行赋值
def makeInc(x): def inc(y): #不允许递增x x += y return x return inc incOne = makeInc(1) incOne(5) #UnboundLocalError:分配前已引用局部变量“x”
Python3提供了nonlocal用于实现带有嵌套函数的完全闭包的语句(非本地变量)。
def makeInc(x): def inc(y): nonlocal x #现在可以给x赋值 x += y return x return inc incOne = makeInc(1) incOne(5) #返回6