Развёрнутое пояснение:
1. Создаётся функция load_rate, которая при вызове печатает строку «резерв» и возвращает 99.
2. В словарь rates записывается существующий тариф standard со значением 10.
3. Перед вызовом rates.get Python вычисляет все переданные аргументы, включая выражение load_rate().
4. load_rate печатает «резерв» и возвращает 99, которое становится запасным значением для get.
5. Метод get находит ключ standard, поэтому возвращает 10, а уже вычисленное запасное значение 99 не использует.
6. Последний print выводит 10, поэтому итоговый вывод состоит из строк «резерв» и «10».
Почему это важно
Задача проверяет порядок вычисления аргументов функции. В реальном проекте передача затратной загрузки или запроса к резервному сервису прямо в dict.get может выполнять лишнюю работу даже при наличии ключа. Для ленивого получения запасного значения сначала проверяют наличие ключа или используют другую явную ветвь выполнения.
Post #4903
130
Python: задачки и вопросы
- ✍ 2