通过迭代器定义的函数列表包含一堆相同函数的副本

问题描述

我想创建一个函数列表,每个函数都定义在集合 {0,1,2} 上,方法是将它们的值设置为在值列表中找到的值。为了检查我做了什么,我然后打印了我的函数的值。这里有两个尝试:

values_list = [[1,2,3],[4,5,6]]

function_list = []
function_list.append((lambda x: values_list[0][x]))
function_list.append((lambda x: values_list[1][x]))
print('Values of 1st function:',function_list[0](0),function_list[0](1),function_list[0](2))
print('Values of 1st function:',function_list[1](0),function_list[1](1),function_list[1](2))

function_list1 = []
for i in range(2):
    function_list1.append((lambda x: values_list[i][x]))
print('Values of 1st function:',function_list1[0](0),function_list1[0](1),function_list1[0](2))
print('Values of 2nd function:',function_list1[1](0),function_list1[1](1),function_list1[1](2))

当然,第一次尝试工作正常,但在第二次尝试中,列表中的两个函数是相同的。他们都返回第二组值。

好的,所以我想原因是,我在定义中使用的迭代器在第二组值处停止。但在实践中,我将拥有大量不同长度的函数值列表,而且我无法像第一次尝试那样为列表中的每个函数键入一行。我能做些什么来解决这个问题?

解决方法

将此行修改为:

function_list1.append((lambda x,y=i: values_list[y][x]))