一种在python中创建函数列表的优雅方法

时间:2013-03-26 14:50:08

标签: python list

[编辑] 例如,我有一个函数,我有不同的y值。

 def h(x):
    return x*y

我尝试在我的列表中附加h(x),比如y = 3.但是,当我将y更改为另一个值并在我的列表中再次附加h(x)时,我的第一个h(x)中的y也有改变。

示例:

>> func_list = []
>> def h(x):
>>    return x*y
>> y = 1
>> func_list.append(lambda x:h(x))
>> func_list[0](5)
>> 5
>> y = 2
>> func_list.append(lambda x:h(x))
>> func_list[1](5)
>> 10
>> func_list[0](5)
>> 10

有没有一种很好的方法可以做到这一点,因为我不能用不同的y值制作大量的h(x)?

2 个答案:

答案 0 :(得分:5)

由于你的y可能存在于一个闭包中(顺便说一下:工作最小的例子怎么样?),你必须在它周围包裹一层:

def mk_func(y):
    def h(x):
        return x * y
    return h

然后

my_funcs=[mk_func(i) for i in (1, 3, 4, 7)]

答案 1 :(得分:4)

您可以使用functools.partial

import functools

def h(y, x):
    return x * y

func_list = [functools.partial(h, y) for y in [1, 3, 5, 7, 9]]
print [f(3) for f in func_list]