Я хочу создать список лямбда-объектов из списка констант в Python; например:
listOfNumbers = [1,2,3,4,5]
square = lambda x: x * x
listOfLambdas = [lambda: square(i) for i in listOfNumbers]
Это создаст список лямбда-объектов, однако, когда я запустил их:
for f in listOfLambdas:
print f(),
Я ожидаю, что он напечатает
1 4 9 16 25
Вместо этого он печатает:
25 25 25 25 25
Кажется, что все лямбды получили неверный параметр. Я сделал что-то неправильно, и есть ли способ исправить это? Я нахожусь в Python 2.4.
РЕДАКТИРОВАТЬ: несколько более сложных вещей, и так получилось:
listOfLambdas = []
for num in listOfNumbers:
action = lambda: square(num)
listOfLambdas.append(action)
print action()
Печать ожидаемых квадратов от 1 до 25, но затем использование более раннего оператора печати:
for f in listOfLambdas:
print f(),
все равно дает мне все 25
s. Как изменились существующие лямбда-объекты между этими двумя вызовами печати?
Связанный вопрос: Почему результаты отображения карты() и списка различны?