在python中创建函数列表的优雅方法
[已编辑] 例如,我有一个函数,我有不同的y值在python中创建函数列表的优雅方法,python,list,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)) >>
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)?因为你的
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)]
.由于您的
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)]
.您可以使用:
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]
您可以为此使用:
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]
请提供更多的代码。您的问题不清楚。你能提供一个简短完整的程序来满足你的需求吗?我知道代码(来自原始帖子)实际上是这样的。它只是执行了改变y值的操作,影响了列表中已经存在的h(x)中y的先前值。不管怎样,在那里。我编辑了它。请提供更多的代码。您的问题不清楚。你能提供一个简短完整的程序来满足你的需求吗?我知道代码(来自原始帖子)实际上是这样的。它只是执行了改变y值的操作,影响了列表中已经存在的h(x)中y的先前值。不管怎样,在那里。我编辑了它。这里列表的制作是一个。这里列表的制作是一个。