В comprehension задайте значение аргумента по умолчанию у lambda: [lambda i=i: i for i in iterable]. Оно вычисляется при создании каждой функции, а не при её последующем вызове.
Не меняя основной код, поменяй только list comprehension, оставив в нём лямбду, так чтобы каждая лямбда захватывала своё значение i — как это сделать?
В comprehension задайте значение аргумента по умолчанию у lambda: [lambda i=i: i for i in iterable]. Оно вычисляется при создании каждой функции, а не при её последующем вызове.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В comprehension задайте значение аргумента по умолчанию у lambda: [lambda i=i: i for i in iterable]. Оно вычисляется при создании каждой функции, а не при её последующем вызове.
Обычная lambda: i обращается к общей переменной окружения, поэтому после завершения цикла функции видят её последнее значение. В lambda i=i правый i берётся на текущей итерации, а левый становится параметром конкретной функции. Если исходное тело было выражением от i, сохраните его после двоеточия. Это захват ссылки, не глубокое копирование изменяемого объекта; вызывающий также может явно передать другой аргумент.