Форум сайта python.su
0
sp3, py.user.next, fata1ex спасибо.
Правильно ли я понял, что лажа была в том, что лямбды считаются лениво после цикла?
Но вот здесь же я обращаюсь принтом в цикле к массиву и нахожу в нем одни лямбды, а потом возвращается массив с совсем другими лямбдами. Я не понимаю, как пример ниже ложится в эту логику.
>>> def gen(a,b): lst = [] for i in xrange(a,b+1): lst.append(lambda x: x+i) print lst[i-a](1) #Каждый раз - разные лямбды return lst >>> l = gen(0,2) 1 2 3 >>> l >>> l[0](1) #Снова полон массив одинаковых лямбд 3
Офлайн
0
Ребят, решение вроде как тут есть:
http://dimonvideo.ru/blogs/blog/Virtuos86/955
Собственно, ко всем задачкам до классов)
Офлайн
13
И что же делать? )Забыть про ущербные питоновые лямбды?
from operator import add from functools import partial def gen1(a, b): return [partial(add, i) for i in xrange(a, b+1)]
Офлайн
568
fata1exДа не, просто ТС посчитал, что ему удобней работать со списком, а не генератором.
FishHook, задание в первом посте
Офлайн
52
Ed, ты опять победил :( хотя весь интерес - победить лямбды!
FishHook, в реальной задаче как раз и написано - “список”.
Написать фабрику, аналогичную п.2, но возвращающей список таких функций
Отредактировано fata1ex (Июнь 22, 2012 12:03:30)
Офлайн
0
Товарищи, так как все-таки быть с тем, что массив хранит разные лямбды? Это как-то объясняется отложенными вычислениями?
Офлайн
568
vaultИменно так.
Товарищи, так как все-таки быть с тем, что массив хранит разные лямбды? Это как-то объясняется отложенными вычислениями?
Офлайн
0
FishHookА можете пояснить? Ведь лямбды в моем последнем примере вычисляются еще в цикле. Нафига их питон пересчитывает потом?
Именно так.
Офлайн
568
vaultЛямбда - это функция.FishHookА можете пояснить? Ведь лямбды в моем последнем примере вычисляются еще в цикле. Нафига их питон пересчитывает потом?
Именно так.
Офлайн
0
FishHook
Лямбда - это функция.
Сколько раз функцию вызываешь, столько раз она и вычисляется.
Офлайн