📖 Теория: Строки: форматирование

⚡ Кратко

Форматирование строк позволяет собирать текст из переменных и выражений. В Python есть три способа: C-style (%), str.format() и f-strings. F-strings — самый современный и удобный.

  • C-style: "%s is %d" % (name, age) — устаревает, но встречается в legacy-коде.
  • format(): "{} is {}".format(name, age) — гибкий, но многословный.
  • f-strings: f"{name} is {age}" — читаемый, быстрый, поддерживает выражения.
  • Для чисел используйте спецификаторы: .2f, ,, >10, 0>5.

Что такое форматирование строк

Форматирование строк — это способ вставки значений переменных или результатов выражений внутрь строки. Вместо того чтобы склеивать части текста вручную через +, мы используем шаблон, в который подставляются нужные значения.

Например, вместо громоздкой конкатенации:

name = "Alice"
age = 30
# плохо: конкатенация и приведение типов
print("My name is " + name + " and I am " + str(age) + " years old.")

Можно написать короче и понятнее:

print(f"My name is {name} and I am {age} years old.")
💡 На заметку: форматирование используется везде: в логах, отчётах, CLI-инструментах, генерации HTML/SQL-запросов, подготовке данных для печати.

C-style форматирование

С-style форматирование в Python использует оператор %. Это один из первых способов форматирования, унаследованный от языка C. Сегодня он считается устаревшим, но вы можете встретить его в старых проектах.

Основные спецификаторы

СпецификаторОписаниеПример
%sСтрока (или любой объект, преобразуемый в строку)"%s" % "hello"
%dЦелое число"%d" % 42
%fЧисло с плавающей точкой"%f" % 3.14
%.2fFloat с двумя знаками после запятой"%.2f" % 3.14159
name = "Alice"
age = 30
pi = 3.14159

print("My name is %s and I am %d years old." % (name, age))
print("Pi ≈ %.2f" % pi)
⚠️ Важно: спецификатор %s преобразует число в строку автоматически, но %d не может принять строку — будет TypeError.

Метод str.format()

Метод format() появился в Python 2.6/3.0 и стал более гибкой заменой C-style. Плейсхолдеры {} внутри строки заменяются переданными значениями.

Позиционные аргументы

name = "Alice"
age = 30
print("My name is {} and I am {} years old.".format(name, age))

Именованные аргументы

print("My name is {name} and I am {age} years old.".format(name="Bob", age=25))

Имена можно использовать несколько раз, что удобно для повторяющихся значений.

Индексы аргументов

print("Her name is {0} and she is {1} years old. {0} loves Python.".format("Anna", 28))

Комбинирование позиционных и именованных аргументов

print("The {0} is {color}.".format("sky", color="blue"))

f-strings

f-strings (formatted string literals) появились в Python 3.6 и сегодня являются рекомендуемым способом форматирования. Перед строкой ставится префикс f, а внутри фигурных скобок можно писать переменные, выражения и даже вызовы функций.

name = "Alice"
age = 25
x, y = 10, 20

text = f"My name is {name} and I am {age} years old."
print(text)

print(f"The sum of {x} and {y} is {x + y}.")

word = "Python"
print(f"The length of '{word}' is {len(word)} and upper is {word.upper()}.")
💡 Преимущества f-strings:
  • Читаемость: переменные находятся прямо в строке.
  • Производительность: f-strings работают быстрее % и format().
  • Гибкость: внутри {} можно использовать любые выражения.
Проверить по документации: отладочный спецификатор {x=} в f-strings появился в Python 3.8. Он выводит имя переменной и её значение: print(f"{x=}")x=10.

Форматирование чисел

Метод format() и f-strings поддерживают единый мини-язык форматирования. После двоеточия в фигурных скобках указывается спецификатор.

Округление float

pi = 3.14159
print(f"Pi ≈ {pi:.2f}")          # 3.14
print("Pi ≈ {:.2f}".format(pi))  # 3.14

Разделители тысяч

large = 1234567890
print(f"{large:,}")   # 1,234,567,890

Выравнивание и ширина поля

СпецификаторЗначение
<По левому краю
>По правому краю
^По центру
print(f"start_{'text':>10}_end")   # start_      text_end
print(f"start_{'text':<10}_end")   # start_text      _end
print(f"start_{'text':^10}_end")   # start_  text    _end

Заполнение символами

number = 40
print(f"{number:0>5}")     # 00040
print(f"{'Python':_^10}")  # __Python__

Методы выравнивания строк

Кроме форматирования через :, у строк есть методы ljust(), rjust() и center(). Они возвращают новую строку заданной ширины, дополненную символами с нужной стороны.

text = "Python"
print(text.ljust(15, '-'))   # Python---------
print(text.rjust(15, '-'))   # ---------Python
print(text.center(15, '-'))  # -----Python----
Проверить по документации: современный стиль рекомендует использовать f-strings вместо C-style во всех новых проектах. Метод format() полезен, когда шаблон строки и данные разнесены по разным частям программы.