2017-04-02 58 views
2

我想实现这样的如何在python中创建函数列表?

list1 = [lambda x: x+0, lambda x: x+1] 

做这个

list2 = [lambda x: x+n for n in range(2)] 

但它不工作! (为什么不?) 如何以编程方式创建函数列表?

+1

因为拉姆达结合'N'到最后一个元素。 –

回答

1

n由用于表达重新分配,所以对于表达完成后都将看到的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)] 
+0

确实,这是我第一次尝试,然后我认为lambda可能会起作用,除非不...... – Ziofil