Форматирование строк: f-string vs `%s` в Python

Форматирование строк: f-string vs `%s` в Python

@python_quiz

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

Условие (код)

Вопрос проверяет, как два способа форматирования обрабатывают значение None и выравнивание:

python

Что делает код — кратко

  • Выражение value or 'нет данных' возвращает 'нет данных', потому что value равно None (логическое значение ложно).
  • В f‑строке {...:>12} означает: преобразовать значение в строку (через внутренний формат) и выровнять вправо по ширине 12 символов.
  • Формат "%12s" тоже преобразует аргумент в строку и выравнивает вправо по ширине 12 символов.
  • В итоге оба вывода получают одну и ту же строку и одинаковое выравнивание.

Демонстрация (запуск и вывод)

Код:

python

Ожидаемый вывод (обратите внимание на пробелы слева — ширина 12 символов):

text

(Перед фразой три пробела — потому что длина строки "нет данных" составляет 9 символов, а ширина задана 12.)

Анализ вариантов ответов

  • Вариант: "Обе строки выведут одинаковый текст и одинаковое выравнивание"

Пояснение: это действительно так в данном коде — оба метода подставляют строку и выравнивают её вправо по ширине 12.

  • Вариант: "Обе строки выведут одинаковый текст, но разное выравнивание"

Пояснение: неверно — спецификаторы >12 и %12s дают одинаковое поведение выравнивания вправо.

  • Вариант: "Текст будет разный, но выравнивание одинаковое"

Пояснение: неверно — текст одинаковый, потому что источник текста одинаков (value or 'нет данных').

  • Вариант: "И текст, и выравнивание будут разными"

Пояснение: неверно по тем же причинам.

Нюансы и примечания

  • Оператор or вернёт правую часть и для других ложных значений (например, пустая строка '', 0, False). Если нужно различать None и пустую строку, следует использовать явную проверку is None.
  • В общих случаях %s вызывает str() для аргумента, а f‑строка с форматом вызывает format() (то есть использует __format__ у объекта). Для простых типов (строки, число) поведение совпадает, но для объектов с кастомным __format__ возможны отличия.
  • Если важно единообразие стиля, предпочтительно использовать f‑строки в современном коде — они более выразительны и гибки.

Вывод

В данном примере оба выражения подставляют одну и ту же строку и выравнивают её одинаково — вывод идентичен. При этом важно помнить о тонкостях поведения or и различиях между %-форматированием и форматированием через format/f‑строки для нестандартных объектов.

Report Page