闭包的条件:1 要有函数的嵌套
2 内部函数使用外部函数的变量
3 外部函数返回内部函数
效果:内部函数先定义并返回,没有执行,当外部执行时以外部函数最终的变量值为准
def count():
fs=[]
for i in range(4):
def f():
return i*i
fs.append(f)
return fs
a=count()
for i in a:
print(i())
结果都是9,9,9,9
如何解决闭包
l1 = [ lambda : x for x in range(10)]
l2 = [ lambda x=x: x for x in range(10)]
ret = l1[0]()
print(ret) #>>>9
ret1 = l1[1]()
print(ret1) #>>>9
ret2 = l2[0]()
print(ret2) #>>>0
ret3 = l2[1]()
print(ret3) #>>>1