Найти - Пользователи
Полная версия: Заранее извиняюсь, или нубовопрос про массив функций.
Начало » Центр помощи » Заранее извиняюсь, или нубовопрос про массив функций.
1
sania2
Итак, сразу к делу:
Есть пародия на функцию от 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

Что надо с функцией сделать, что бы вывод стал таким и почему это происходит в моей вариации? Заранее спасибо!
Ed
Вот так должно сработать:
def superjuk(lf,la):
return [(lambda x, y=i: lf[y](x+la[y])) for i in xrange(0,len(la))]
А происходит это потому, что в цикле все i, которые в лямбдах биндятся к одной переменной и, как результат получают ее последнее установленное значение.
sania2
спсибо. Функцию расчленил и теперь всё работает. Сяп.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB