别处对闭包的一点说明
"外部函数发现,自己的临时变量会在将来的内部函数中用到,自己在结束的时候,返回内函数的同时,会把外函数的临时变量送给内函数绑定在一起。所以外函数已经结束了,调用内函数的时候仍然能够使用外函数的临时变量。"
问:外函数是怎么知道 那个临时变量要绑到内函数上?
例如下面的例子,f执行后将a绑到了g上,并删掉了c 而g并没有执行,f怎么知道g需要a的呢?
import sys
a = 2
c = 25
print(sys.getrefcount(25))
d = 25
print(sys.getrefcount(25))
def f():
a = 25
c = 25
print(sys.getrefcount(25))
def g():
print(a)
return g
l = f()
print(sys.getrefcount(25))
l()
print(sys.getrefcount(25))
'''
--------------运行结果---------------
49
50
52
51
25
51
'''
在编译的时候,变量就已经和内函数绑定了 另外25在程序中十分常用,引用数的变化可能不同于预想 (变量在编译阶段时计算"引用数"而不是执行时计数)