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