Проверка логики условного выражения в Python: debug и features

Проверка логики условного выражения в Python: debug и features

@python_quiz

Разберем этот квиз

Код квиза:

python

Коротко: этот фрагмент печатает OFF.

Дальше — почему так происходит и какие подводные камни стоит учитывать.

По шагам: как интерпретируется выражение

  1. config.get("debug") возвращает False (в словаре значение False).
  2. config.get("features") — в словаре это пустой список [], а пустой список в булевом контексте оценивается как False.
  3. Оператор and в Python:

- возвращает первый ложный операнд (short-circuit), если он встречается;
- иначе возвращает последний истинный операнд.

  1. В нашем выражении условие тернарного оператора выглядит так:

- вычисляется (config.get("debug") and config.get("features"))
- поскольку левая часть уже False, выражение and сразу возвращает False и правая часть не вычисляется (short-circuit).

  1. Условие в тернарном операторе оказывается ложным, поэтому выполняется ветка else — печатается строка "OFF".

Демонстрация (включая поведение short-circuit)

python

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

python

Анализ вариантов (коротко)

  • "Выведет: ON" — верно только если оба значения truthy (например, debug=True и features не пустой).
  • "Выведет: OFF" — соответствует текущей конфигурации (debug=False, features=[]).
  • "Ошибка выполнения" — не происходит: доступ через get безопасен, синтаксически всё верно.
  • "Ничего не выведет" — тоже неверно: print всегда напечатает одну из двух строк.

Полезные замечания и рекомендации

  • Пустые контейнеры ([], {}, "", set()) оцениваются как False в булевом контексте.
  • Оператор and возвращает сам операнд, а не обязательно булево значение; если нужно явно булево значение, используйте bool(...).
  • Short-circuit полезен для предотвращения лишних вычислений или вызовов с побочными эффектами.
  • Если хотите, чтобы обе части всегда были вычислены (например, для логирования), вызывать их нужно явно до проверки.

Итого: при текущем содержимом словаря условие ложно, поэтому программа печатает OFF.

Report Page