[编辑] 例如,我有一个函数,我有不同的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)?
答案 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]