В этом [lambda d: for d in [1,2]]
что у вас есть
«Запуск d
от 1 до 2, дают мне функцию, возвращающую значение d
в тот момент, когда функция вызывается.»
После этого список из двух функций построен, вы вызываете [f() for f in that list]
. На данный момент функция вызывается, d in [1,2]
уже завершен, и d
имеет свое окончательное значение, 2
. Таким образом, обе функции возвращают 2
.
Один из способов получить другой результат - скопировать d
в переменную для каждой создаваемой лямбда-функции. Самый простой способ сделать это:
[f() for f in [lambda x=d: x for d in [1,2]]]
Здесь каждый lambda
имеет свое собственное значение по умолчанию для x
, который d
в то время, функция создается.
Сфера параметров может быть? Требуется закрытие для сохранения предыдущих значений. Возможно дублирование [Область действия лямбда-функций python и их параметры] (http://stackoverflow.com/questions/938429/scope-of-python-lambda-functions-and-their-parameters) – Dilettant