Развёрнутое пояснение:
1. Вызов save(5) создаёт пустой список result.
2. В try-блоке вычисляется value // 2, то есть 2, и это значение добавляется в result.
3. Достигается инструкция return result.
4. Перед фактическим возвратом управление обязательно переходит в finally-блок, так как finally выполняется при любом выходе из try/except.
5. В finally вычисляется value * 2, то есть 10, и это значение тоже добавляется в тот же список result.
6. Теперь result содержит [2, 10].
7. Функция возвращает ссылку на этот список.
8. print выводит [2, 10].
Почему это важно: в реальном коде finally используется для cleanup, метрик или освобождения ресурсов. Если при этом мутировать объект, который планируется вернуть из функции, финальное значение изменится ещё до передачи вызывающей стороне. Это стреляет в сценариях, когда return и cleanup работают с одной структурой данных, например при сборке ответа, логировании или обновлении кэша.
Post #4823
317
Python: задачки и вопросы
- ✍ 2