这样的代码执行后fs=[f(1),f(2),f(3)]吗
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 fsf1,f2,f3=count()print f1(), f2(), f3() |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
闭包问题,首先,你得先明白在python里面,一切皆对象,函数也是一个对象。
在函数这个对象里面有一个特殊的属性,那就是__closure__,这是函数的一个闭包属性(姑且这么叫吧),用来存储其引用的外层函数的变量,该属性在定义的时候创建,而不是执行时。看图
然后再理解一下代码应该没多大问题了
defcount():fs=[]foriinrange(1,4):deff(j):defg():#return__closure__[0].cell_contents*__closure__[0].cell_contentsreturnj*jreturng#执行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)returnfsf1,f2,f3=count()printf1(),f2(),f3()水平有限,只能解释成这样了。 |
|
|
|
|