动态生成函数参数python

时间:2018-01-24 11:41:58

标签: python python-2.7 lambda closures

我在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"是一个单独的变量,以不同的方式传递给函数。

我意识到这是一个非常丑陋的构造,但是继承了大量的代码,需要进行更改以避免这种情况。

1 个答案:

答案 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