1

[编辑] 例如我有一个函数,我有不同的 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),所以有什么好的方法吗?

4

2 回答 2

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)]

.

于 2013-03-26T14:52:06.857 回答
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]
于 2013-03-26T14:52:20.003 回答