Выбор ответа Junior Исключения и контекстные менеджеры обновлено
EAFP и LBYL
Вопрос
Почему в Python часто предпочитают try: value = d[key] except KeyError: вместо if key in d:?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: EAFP: одна операция вместо двух и нет гонки. EAFP («проще попросить прощения») избавляет от двойного поиска и от состояния гонки, когда между проверкой и действием мир меняется (файл удалили, ключ убрали в другом потоке). in для словаря O(1) и работает для любых хешируемых ключей.
Варианты ответа
- Проверка
inдля словаря работает за O(n), аd[key]за O(1) if key in dне работает для строковых ключей с юникодом- EAFP: одна операция вместо двух и нет гонкиправильный ответ
- Исключения в Python бесплатны в любом случае
Разбор
EAFP («проще попросить прощения») избавляет от двойного поиска и от состояния гонки, когда между проверкой и действием мир меняется (файл удалили, ключ убрали в другом потоке). in для словаря O(1) и работает для любых хешируемых ключей. Исключения не бесплатны: если отсутствие ключа частый сценарий, d.get() или in быстрее.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.