第一题
# 在 闭包中,返回函数不要引用任何循环变量,或者后续会发生变化的变量。
def count():
l = []
for i in range(1, 4):
def f():
return i*i
l.append(f)
return l # [f,f,f] 函数list
f1, f2, f3 = count() # 解包
print(f1(),f2(),f3()) # >>> 9 9 9 为什么都是9呢?思考下吧~
解释:打印出来的结果为9,因为该函数引用了循环变量后,并非立刻执行,等到3个函数都返回时,它们所引用的变量x已经变成了3,因此最终结果为9
第二题,再看下这个例子,本质和第一题是一样的问题
def num():
a = [lambda x:i*x for i in range(4)] # i ==0,1,2,3 return四个函数表达式
res = [m(2) for m in a] # 列表生成式:for循环用来控制列表数量
# 原本想的res应该为[0,2,4,6] 但实际结果是[6,6,6,6]
return res
print(num())