Развёрнутое пояснение:
1. make_handlers создаёт пустой список handlers.
2. Цикл дважды присваивает переменной status значения 'new' и 'done'.
3. На каждой итерации создаётся lambda, но текущее значение status внутрь неё не копируется.
4. После цикла обе функции обращаются к одной переменной status, сохранившей последнее значение 'done'.
5. Последовательный вызов обработчиков поэтому возвращает список ['done', 'done'].
Почему это важно
Задача относится к позднему связыванию имён в замыканиях. Такая ситуация встречается при создании обработчиков событий и отложенных задач в цикле: без отдельной фиксации значения все обработчики могут работать с последним элементом.
Post #4881
150
Python: задачки и вопросы
- ✍ 1