Поведение оператора or и форматирования строк в Python

Поведение оператора or и форматирования строк в Python

@python_quiz

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

Коротко: в приведённом фрагменте кода используется оператор or, который возвращает первый истинный (truthy) операнд. Так как None считается ложным, в обоих случаях подставится строка "N/A". Разберём подробно и покажем альтернативы.

Исходный код

python

Почему вывод именно такой

  • Оператор or в Python возвращает сам первый операнд, если он истинный, иначе — второй операнд. Он не приводит значения к булевому типу, он возвращает значение целиком.
  • None — ложное (falsy) значение, поэтому выражение value or 'N/A' даёт 'N/A'.
  • Оба способа форматирования (f-строка и старый стиль "%s") получают уже вычисленную строку 'N/A' и печатают её. Ошибок (TypeError) не возникает: формат %s использует str(), а f-строка вызывает форматирование через __format__, которое для строк тоже безопасно.

Демонстрация — вывод

python

Вывод:

Дополнительные примеры и нюансы

Оператор or возвращает значение, а не обязательно булево:

python

Ожидаемый вывод:

Заметьте: числовой 0, пустая строка и False тоже считаются ложными, поэтому будут заменены на 'N/A'. Если это не то поведение, которое нужно (например, вы хотите оставлять 0 как валидное значение), используйте проверку на None явно.

Альтернативы: заменять только None

Если нужно подставлять запасное значение только при value is None, правильный способ:

  • В f-строке:
python
  • Со старым стилем:
python

Эти варианты сохранят 0, False и пустую строку как допустимые значения.

Вывод

  • В исходном коде оба выражения напечатают "N/A", потому что оператор or выбирает второе значение при ложном первом.
  • Оператор or возвращает сам операнд, а не булево значение.
  • Если хотите заменять только None, проверяйте явно через is None.

Report Page