我正在尝试将返回值列表转换为返回这些值的函数列表。
lst = [1, 2]
funcs = [lambda: x for x in lst]
这相当于:
x = 2
funcs = [lambda: x, lambda: x]
但我想得到:
funcs = [lambda: 1, lambda 2]
这question解释了为什么会发生这种情况,但没有提供一种方法。
有没有办法实现这个目标?
答案 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
的主体中。