Проверка логики условного выражения в Python: debug и features
@python_quizРазберем этот квиз
Код квиза:

Коротко: этот фрагмент печатает OFF.
Дальше — почему так происходит и какие подводные камни стоит учитывать.
По шагам: как интерпретируется выражение
- config.get("debug") возвращает False (в словаре значение False).
- config.get("features") — в словаре это пустой список [], а пустой список в булевом контексте оценивается как False.
- Оператор and в Python:
- возвращает первый ложный операнд (short-circuit), если он встречается;
- иначе возвращает последний истинный операнд.
- В нашем выражении условие тернарного оператора выглядит так:
- вычисляется (config.get("debug") and config.get("features"))
- поскольку левая часть уже False, выражение and сразу возвращает False и правая часть не вычисляется (short-circuit).
- Условие в тернарном операторе оказывается ложным, поэтому выполняется ветка else — печатается строка "OFF".
Демонстрация (включая поведение short-circuit)

Если изменить конфигурацию так, чтобы обе части были truthy — например, debug = True и features = [1] — то результат будет другой:

Анализ вариантов (коротко)
- "Выведет: ON" — верно только если оба значения truthy (например,
debug=Trueи features не пустой). - "Выведет: OFF" — соответствует текущей конфигурации (
debug=False, features=[]). - "Ошибка выполнения" — не происходит: доступ через get безопасен, синтаксически всё верно.
- "Ничего не выведет" — тоже неверно: print всегда напечатает одну из двух строк.
Полезные замечания и рекомендации
- Пустые контейнеры ([], {}, "", set()) оцениваются как False в булевом контексте.
- Оператор and возвращает сам операнд, а не обязательно булево значение; если нужно явно булево значение, используйте bool(...).
- Short-circuit полезен для предотвращения лишних вычислений или вызовов с побочными эффектами.
- Если хотите, чтобы обе части всегда были вычислены (например, для логирования), вызывать их нужно явно до проверки.
Итого: при текущем содержимом словаря условие ложно, поэтому программа печатает OFF.