我试图实现这样的目标
list1 = [lambda x: x+0, lambda x: x+1]
这样做
list2 = [lambda x: x+n for n in range(2)]
但它不起作用! (为什么不?) 如何以编程方式创建函数列表?
答案 0 :(得分:1)
n
由for表达式重新分配,因此在for表达式完成后,两者都会看到n
的值为1。
在没有列表表达式的情况下,可以看到更多典型的此问题示例:
list3 = []
for n in range(2):
def f(x):
return x + n
list3.append(f)
此处所有创建的函数对象都将引用相同的变量n
,并且它将被赋值为1,两个函数对象将作为lambda x: x + 1
。
您可以通过为每个创建的函数创建一个带变量的附加范围来处理它:
a = [(lambda n: lambda x: x+n)(n) for n in range(2)]