我在Python 2.7中工作,需要生成一个函数列表,每个函数都有一个不同的默认参数,但解释函数的位置。这不是最好的解释,但我认为下面的例子澄清了我的问题。有没有办法做到这一点?
function_list = []
for i in range(10):
function_list.append(lambda x: myfunc(i,x))
def myfunc(a,b):
print a + b
这不起作用,因为在此示例中,函数列表中的所有函数都返回9 + x
在上面的示例中" x"是一个单独的变量,以不同的方式传递给函数。
我意识到这是一个非常丑陋的构造,但是继承了大量的代码,需要进行更改以避免这种情况。
答案 0 :(得分:3)
您可以使用i
作为具有两个参数的lambda的默认值。这样它就更适合问题描述:
需要生成一个函数列表,每个函数都有一个不同的默认参数
代码如下:
function_list = []
for i in range(10):
function_list.append(lambda x, y=i: myfunc(x,y))
for f in function_list:
f(5)
输出将是:
5
6
7
8
9
10
11
12
13
14
你也可以使用f
两个参数:
for j,f in enumerate(function_list):
f(j+2,5)
你会得到:
7
8
9
10
11
12
13
14
15
16