def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r=f(i)
fs.append(r)
return fs
f1,f2,f3=count()
print f1(), f2(), f3()
1 回答
Iamxiaoq
TA贡献33条经验 获得超6个赞
闭包问题,首先,你得先明白在python里面,一切皆对象,函数也是一个对象。
在函数这个对象里面有一个特殊的属性,那就是__closure__,这是函数的一个闭包属性(姑且这么叫吧),用来存储其引用的外层函数的变量,该属性在定义的时候创建,而不是执行时。看图
然后再理解一下代码应该没多大问题了
def count(): fs = [] for i in range(1, 4): def f(j): def g(): # return __closure__[0].cell_contents * __closure__[0].cell_contents return j*j return g # 执行f(i)返回创建函数g返回,此时g.__closure__[0].cell_contents存储的就是i的值 # [g.__closure__[0].cell_contents=1, g.__closure__[0].cell_contents=2, g.__closure__[0].cell_contents=3] r = f(i) fs.append(r) return fs f1,f2,f3=count() print f1(), f2(), f3()
水平有限,只能解释成这样了。
添加回答
举报
0/150
提交
取消