Вопрос на собеседовании · Python-разработчик
Изменяемый аргумент по умолчанию: в чём ловушка?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
Значения аргументов по умолчанию вычисляются один раз при создании функции, а не при каждом вызове. Поэтому список или словарь, изменённый в первом вызове, будет тем же объектом в последующих вызовах.
Безопасный шаблон — использовать None как маркер и создавать новый объект внутри функции. Если None является допустимым бизнес-значением, применяют отдельный объект-sentinel, чтобы различать отсутствие аргумента и явно переданное значение.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Функция add_item(item, items=[]) добавляет элемент в один и тот же список при каждом вызове. Вариант add_item(item, items=None) с созданием items = [] внутри даёт каждому вызову отдельный список.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Когда вычисляются значения по умолчанию?
- Зачем нужен sentinel object?
- Какие ещё объекты считаются изменяемыми?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с опорой.
Mira