我试图在这里更好地了解范围。
def f1():
a = 1
def g1(X):
return X+a
return g1
def f2():
a = 1
def g2(X):
return X+1
return g2
g1 = f1()
print g1(4)
g2 = f2()
print g2(4)
# both give 5 as you'd expect
我的问题是,a
被摧毁了吗?它在哪个范围内?我的一般理解是,在f2
的第二种情况下,一旦函数返回肯定不可用。这种方式,例如,如果你有一个巨大的数组或内存变量,一旦函数返回它们就不再有了。
这里发生了什么?
修改
这里有空吗?
def f1():
a = 1
b = 1
def g1(X):
return X+a
return g1
答案 0 :(得分:5)
如果一个函数包含另一个函数,并且内部函数包含对外部函数中变量的引用,并且在外部函数结束后内部函数仍处于“活动”状态(即,返回它或以某种方式创建引用it),创建一个闭包,“保存”这些变量,使它们在被调用时可用于内部函数。
在你的第二个例子中,b
不可用,因为内部函数g1
没有引用它,因此它不会保存在闭包中。