Форматирование строк
f-строки — главный современный инструмент вставки значений в текст. Разберём их по-настоящему полно: от простой подстановки до выравнивания в столбик.
Мы уже пользовались f-строками начиная с главы 4 — теперь разберём форматирование строк по-настоящему полно.
f-строка — простая подстановка
Перед открывающей кавычкой ставится буква f, а внутри
фигурных скобок {} — имя переменной. Python сам подставит
туда значение:
name = "Ада"
print(f"Привет, {name}!")
# Привет, Ада!
Внутри {} можно писать выражения
Это не просто подстановка имени — внутри скобок работает ЛЮБОЕ Python-выражение: арифметика, вызов метода, что угодно:
age = 5
print(f"Через год будет {age + 1}.") # Через год будет 6.
name = "cartesian"
print(f"Заглавными: {name.upper()}") # Заглавными: CARTESIAN
Форматирование чисел: точность и разделители
После значения можно поставить двоеточие и спецификатор формата — как именно отобразить число:
pi = 3.14159265
print(f"Пи округлённо: {pi:.2f}") # Пи округлённо: 3.14 — 2 знака после запятой
print(f"{1234567:,}") # 1,234,567 — разделитель тысяч
print(f"{0.4567:.1%}") # 45.7% — доля как проценты
.2f читается так: f — число с
плавающей точкой, .2 — округлить до 2 знаков после запятой.
Выравнивание и ширина
Число после двоеточия (без точки) задаёт минимальную ширину поля — удобно для выравнивания текста в столбик:
for name, score in [("Ада", 98), ("Алан", 87), ("Грейс", 100)]:
print(f"{name:<8} {score:>5}")
# Ада 98
# Алан 87
# Грейс 100
| Спецификатор | Значение |
|---|---|
{value:<10} | по левому краю, ширина поля 10 |
{value:>10} | по правому краю, ширина поля 10 |
{value:^10} | по центру, ширина поля 10 |
{value:.2f} | дробное число, 2 знака после запятой |
{value:,} | разделитель тысяч запятой |
= — Python выведет и само выражение, и его значение. Отлично подходит для быстрой проверки: print(f"{{age=}}") выведет age=28 — без ручного набора текста «age =».name = "Cartesian"
age = 5
# оператор % — самый старый способ
print("Привет, %s! Тебе %d лет." % (name, age))
# .format() — более новый, но всё ещё многословный
print("Привет, {}! Тебе {} лет.".format(name, age))
name = "Cartesian"
age = 5
# f-строка — значения прямо внутри {}
print(f"Привет, {name}! Тебе {age} лет.")
# работают и выражения, не только переменные:
print(f"Через год будет {age + 1}.")
% — самый старый способ, доставшийся от языка Си, всё ещё встречается в старом коде. .format() — промежуточный шаг между ними. f-строки читаются лучше всего: значение видно прямо там, где оно будет подставлено, и можно писать любые выражения, а не только имена переменных.Выведите строку «Итого: 1234.5 → 1 234.50 ₽» (используя :,.2f) для суммы 1234.5, и отдельно — «Скидка: 15.0%» для доли 0.15 (используя :.1%).