关闭
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) # returns 6
incFive(5) # returns 10
请注意,在常规闭包中,封闭函数完全从其封闭环境继承所有变量,在此构造中,封闭函数只具有对继承变量的读访问权限,但不能对它们进行赋值
def makeInc(x):
def inc(y):
# incrementing x is not allowed
x += y
return x
return inc
incOne = makeInc(1)
incOne(5) # UnboundLocalError: local variable 'x' referenced before assignment
Python 3 提供了 nonlocal
语句(Nonlocal Variables ),用于实现嵌套函数的完全闭包。
Python 3.x >= 3.0
def makeInc(x):
def inc(y):
nonlocal x
# now assigning a value to x is allowed
x += y
return x
return inc
incOne = makeInc(1)
incOne(5) # returns 6