lambda函数的Python列表

lambda函数的Python列表,python,function,lambda,Python,Function,Lambda,假设我需要构建nlambda函数,并将它们放入列表中: n = 6 lamd_list = [lambda x: x * i for i in range(n)] 此处,x是lambda函数的输入,i在列表中固定为0~5。但是,当我跑步时: lamb_list[0](3) 输出将是15(3*5),而不是0(0*5)。如何修改代码以使其符合预期? 注意这里的n是一个变量(不是固定的),所以我不能手动执行循环。另外,我不想将I作为lambda函数的输入。定义函数时,I的值不是固定的,而是在调用函

假设我需要构建nlambda函数,并将它们放入列表中:

n = 6
lamd_list = [lambda x: x * i for i in range(n)]
此处,
x
是lambda函数的输入,
i
在列表中固定为0~5。但是,当我跑步时:

lamb_list[0](3)
输出将是15(3*5),而不是0(0*5)。如何修改代码以使其符合预期?
注意这里的
n
是一个变量(不是固定的),所以我不能手动执行循环。另外,我不想将
I
作为lambda函数的输入。

定义函数时,
I
的值不是固定的,而是在调用函数时固定的。您可以修复它,但我建议根本不要使用lambda表达式。相反,定义一个在调用时创建函数的函数;它使范围界定更容易处理

def make_function(i):
    def _(x):
        return x * i
    return _

func_list = [make_function(i) for i in range(n)]
这里的区别在于,
make_function
返回的函数中的
i
不是全局变量,而是调用
make_function
时参数
i
的值

与另一种可能的解决方案进行比较

lambd_list = [lambda x, unused=i: x * unused for i in range(n)]

这需要在每个函数中添加一个未使用的参数。这里的区别是,
unused
的默认值与lambda表达式同时计算。

由@chepner给出的答案比问题下方的答案更清晰易懂。