2013-03-26 2 views
1

[отредактировано] Например, у меня есть функция, и у меня разные значения y.Элегантный способ сделать список функций в python

def h(x): 
    return x*y 

Я попытался добавления (х) в моем списке, скажем, у = 3. Однако, когда я меняю у другого значения и добавьте к (х) снова в моем списке, то у в моем первом ч (х) также изменилось.

Пример:

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

Есть хороший способ сделать это, так как я не могу сделать много ч (х) 's с различными значениями у?

+1

Пожалуйста, предоставьте немного больше кода. – whatyouhide

+2

Ваш вопрос непонятен. Не могли бы вы предоставить короткую ** полную ** программу, которая делает то, что вы хотите? http://SSCCE.org –

+0

I Код (из исходного сообщения) был на самом деле. Это было просто выполнение изменения значения y, влияющего на предыдущие значения y в h (x) уже в списке. Во всяком случае, там. Я отредактировал его. – skinnyas123

ответ

5

Как ваш y probobly живет в затворе (BTW: что о рабочей минимальной exmple?), Вам придется обернуть слой вокруг него:

def mk_func(y): 
    def h(x): 
     return x * y 
    return h 

, а затем

my_funcs=[mk_func(i) for i in (1, 3, 4, 7)] 

.

+0

Это сработало. СПАСИБО! – skinnyas123

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] 
+0

И создание списка здесь - это [понимание списка] (http://www.youtube.com/watch?v=pShL9DCSIUw). –

Смежные вопросы