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 に答える