Уведомления

Группа в Telegram: @pythonsu

#1 Июль 3, 2011 20:55:16

sania2
От:
Зарегистрирован: 2011-07-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Заранее извиняюсь, или нубовопрос про массив функций.

Итак, сразу к делу:
Есть пародия на функцию от 2 аргументов -
lf - список маленьких функций
la - список интовых чисел

функция должна у каждого куска логического массива делать примерно это:
было: lf равен lambda x:2*x
la равен 3
стало: lambda x: 2(x+3)

в моём исполнении она выглядела так -
def superjuk(lf,la):
return [(lambda x: lf(x+la)) for i in xrange(0,len(la))]

при этом при её прогоне от
lf =
la=
f=superjuk(lf,la)

for i in xrange(0,len(f))
print f

полученное значение, новоприсвоенное другой переменной и выведенное циклом БЕЗ ОШИБОК(пробовал по всякому, даже вручную) на выходе все функции в списке кроме последней равны последней:
-6 -6 -6
вместо
16 8 -6

Что надо с функцией сделать, что бы вывод стал таким и почему это происходит в моей вариации? Заранее спасибо!



Офлайн

#2 Июль 3, 2011 21:49:32

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Заранее извиняюсь, или нубовопрос про массив функций.

Вот так должно сработать:

def superjuk(lf,la):
return [(lambda x, y=i: lf[y](x+la[y])) for i in xrange(0,len(la))]
А происходит это потому, что в цикле все i, которые в лямбдах биндятся к одной переменной и, как результат получают ее последнее установленное значение.



Офлайн

#3 Июль 4, 2011 14:35:01

sania2
От:
Зарегистрирован: 2011-07-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Заранее извиняюсь, или нубовопрос про массив функций.

спсибо. Функцию расчленил и теперь всё работает. Сяп.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version