Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中创建函数列表的优雅方法_Python_List - Fatal编程技术网

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

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

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

因为你的
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的先前值。不管怎样,在那里。我编辑了它。这里列表的制作是一个。这里列表的制作是一个。