使用列表推导式输出一个以匿名函数为元素的列表发生的出错,其结果是列表里所有元素为同一个匿名函数
f = [lambda x: i for i in range(3)] #f是一个匿名函数组成的列表,匿名函数将所有输入简单输出为不同常数加以区分
a = [None] * 3 #a用于储存匿名函数传入参数后的输出值
for i in range(3):
a[i] = f[i](1)
print(a) #输出结果为[2,2,2]
下面采用for 循环能够得到正确答案,但不清楚原因
f = [None] * 3 #采用for循环创建列表,初始值为[None, None, None]
for i in range(3):
f[i] = lambda x : i #分别定义列表元素值,若f采用append方法则与上一种方法答案相同
a = [None] * 3 #输出
for i in range(3):
a[i] = f[i](1)
print(a) #[0, 1, 2],得到正确结果