如何在python中创建函数列表?

时间:2017-04-02 19:00:35

标签: python function pointers

我试图实现这样的目标

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

这样做

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

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

1 个答案:

答案 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)]