如何将值列表转换为返回这些值的函数列表

时间:2017-11-28 13:58:20

标签: python list-comprehension

我正在尝试将返回值列表转换为返回这些值的函数列表。

lst = [1, 2]
funcs = [lambda: x for x in lst]

这相当于:

x = 2
funcs = [lambda: x, lambda: x]

但我想得到:

funcs = [lambda: 1, lambda 2]

question解释了为什么会发生这种情况,但没有提供一种方法。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:4)

这将有效:

[lambda x=x: x for x in lst]

说明:这将创建一个新的函数参数x,使用当前设置为循环参数x的默认值进行初始化。当您调用不带参数的方法时,将返回默认值。

我建议使用不同的名称来减少混淆:

[lambda result=i: result for i in lst]

另一种方法是编写自己的lambda - 类函数,它定义它返回的嵌套函数。

答案 1 :(得分:2)

您可以使用:

def f(x):
    return lambda: x

funcs = [f(x) for x in lst]

如果函数更复杂,这种方法可能特别有用,因为在这里你可以将任意函数定义放入f的主体中。