LINUX.ORG.RU

Неправильное поведение лямбда-функций

 , ,


0

2

Есть у меня вот такой код:

funcs = []

for i in (0,1):
 funcs.append(lambda: i == 1)

print funcs[0], funcs[0]()
print funcs[1], funcs[1]()

Выдаёт он мне:

<function <lambda> at 0x0000000001D72518> 1
<function <lambda> at 0x0000000001FDDDD8> 1

Как бы мне сделать так, чтобы первая функция выдавала 0, а вторая - 1? Где здесь собака зарыта?


Ответ на: комментарий от www_linux_org_ru

то можно было догадаться, что количество ошибок в рантайме будет одинаковым

Это ещё почему? У хаскеля гораздо меньше ошибок которые могут вылезти в рантайме.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

хотя и я что-то явно не понимаю

скажем, я бы предсказал результаты ориентировочно как-то так:

        ccccccccc|ccccccccc|ccccccccc|ccccccccc|ccccc
python  rrrrrrrrr|rrrrrrrrr|rrrrr
        wwwwwwwww|wwwww

        ccccccccc|ccccccccc|ccccc
haskell rrrrrrrrr|rrrrrrrrr|rrrrr
        wwwwwwwww|wwwww

но результат совсем не такой...

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

ну что комментировать по строке 196 и ниже?

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.