Введение
Форматирование строк — один из самых мощных и удобных инструментов языка Python, позволяющий гибко управлять выводом информации. Независимо от того, создаёте ли вы отчёт, лог-файл или пользовательский интерфейс, красиво и правильно оформленный текст играет важную роль. Особенно это важно при работе с числовыми данными, датами, таблицами и многоуровневыми шаблонами.
Правильное форматирование также повышает читаемость кода, облегчает отладку, логирование и отображение результатов в пользовательском интерфейсе. В профессиональной среде форматированные строки часто становятся частью шаблонов, конфигураций и HTML-отчётов.
Python предлагает три основных подхода к форматированию строк:
-
f-строки (f-strings, с версии Python 3.6)
-
Метод
.format()
-
Старый стиль —
%
форматирование (устаревающий, но всё ещё используется)
В этой статье мы разберем каждый из них, уделим особое внимание f-строкам как наиболее читаемому и быстрому способу. Также рассмотрим форматирование чисел (дробных, процентов, экспонент), работу с выравниванием, шаблонами и реальными кейсами из жизни разработчика. Мы покажем, как комбинировать различные методы и использовать их для генерации текстов любой сложности.
f-строки: самый современный способ
Синтаксис f-строк
f-строки появились в Python 3.6 и стали настоящим прорывом по удобству и читаемости. Это литералы строк, начинающиеся с буквы f
перед кавычками, в которых можно вставлять переменные и выражения прямо внутри фигурных скобок {}
.
name = "Иван"
age = 30
print(f"Привет, меня зовут {name}, мне {age} лет.")
Вы можете использовать не только переменные, но и любые допустимые Python-выражения:
print(f"Через 5 лет мне будет {age + 5} лет.")
Также можно вызывать функции:
def square(x):
return x * x
print(f"Квадрат числа 4: {square(4)}")
Форматирование чисел
f-строки поддерживают встроенное форматирование:
pi = 3.1415926
print(f"Число Пи с двумя знаками: {pi:.2f}") # 3.14
Синтаксис | Назначение |
---|---|
:.2f |
два знака после запятой (float) |
:,.2f |
с разделителем тысяч |
:e |
экспоненциальная форма |
:% |
процентное представление |
:>10 |
выравнивание вправо по ширине 10 |
:<10 |
выравнивание влево по ширине 10 |
:^10 |
по центру |
Выравнивание и ширина
Форматирование строк также позволяет красиво выравнивать данные:
value = 42
print(f"|{value:<10}| {value:^10} | {value:>10}|")
Форматирование как шаблонизация
f-строки позволяют вставлять данные из словарей, списков и объектов:
user = {"name": "Анна", "balance": 1234.567}
print(f"{user['name']}, ваш баланс: {user['balance']:.2f} руб.")
Метод .format()
: универсальный и гибкий
Метод .format()
позволяет вставлять переменные в строку по позициям или именам:
template = "Привет, {0}. У тебя {1} новых сообщений."
print(template.format("Оля", 5))
Именованные аргументы:
print("{name} учится в {university}".format(name="Вася", university="МГУ"))
Выравнивание и числа
print("{:>10.2f}".format(123.4567)) # ' 123.46'
Форматирование словарей и объектов
Можно передавать словари напрямую:
data = {"product": "Ноутбук", "price": 58990.9}
print("{product}: {price:.2f} руб.".format(**data))
Старый стиль (%-форматирование)
Этот стиль пришёл из языка C и используется по сей день в старых проектах.
name = "Петя"
score = 95.5
print("%s набрал %.1f баллов" % (name, score))
Основные спецификаторы
Спецификатор | Значение |
%s |
Строка |
%d |
Целое число |
%f |
Float |
%.2f |
Float с 2 знаками |
Не рекомендуется для новых проектов, но полезно знать для поддержки старого кода.
Форматирование чисел в Python
Десятичные дроби и округление
number = 1234.56789
print(f"{number:.2f}") # 1234.57
Также можно использовать round()
:
rounded = round(number, 3)
Разделители тысяч
price = 1050000
print(f"{price:,}") # 1,050,000
Для вывода в другом формате можно заменить запятую на пробел или точку через .replace()
.
Формат процентов
ratio = 0.875
print(f"Процент: {ratio:.2%}") # 87.50%
Экспоненциальная форма
mass = 0.000056
print(f"Масса: {mass:.2e}") # 5.60e-05
Выравнивание, ширина и табличное форматирование
items = [("Яблоки", 25.5), ("Бананы", 40.1), ("Апельсины", 58.39)]
for name, price in items:
print(f"{name:<12} | {price:>8.2f} руб.")
Результат:
Яблоки | 25.50 руб.
Бананы | 40.10 руб.
Апельсины | 58.39 руб.
Можно использовать таблицы в Markdown или HTML для генерации отчётов.
Форматирование текста
Методы строк для работы с регистрами:
-
.capitalize()
— первая буква заглавная -
.title()
— каждое слово с заглавной буквы -
.upper()
/.lower()
— перевод в верхний/нижний регистр -
.center(width, fillchar)
— выравнивание по центру с символом-заполнителем
text = "python"
print(text.upper()) # PYTHON
print(text.center(10, "-")) # --python--
Кейс: Генерация HTML с f-строками
title = "Привет мир"
body = "Это абзац текста."
html = f"""
<html>
<head><title>{title}</title></head>
<body><p>{body}</p></body>
</html>
"""
print(html)
Этот приём особенно полезен для шаблонов писем, отчетов, веб-страниц.
Производительность: f-строки быстрее всех
import timeit
name = "Alice"
# f-string
print(timeit.timeit('f"Hello {name}"', globals=globals()))
# format()
print(timeit.timeit('"Hello {}".format(name)', globals=globals()))
# %
print(timeit.timeit('"Hello %s" % name', globals=globals()))
На практике f-строки не только быстрее, но и значительно понятнее. Это важно для читаемости кода в командах.
Заключение
Форматирование строк в Python — это гораздо больше, чем просто вставка значений. Это способ создать читаемый, точный и управляемый вывод информации. f-строки — современный стандарт, рекомендованный для большинства задач. Метод .format()
полезен при динамическом форматировании или шаблонах, а %
следует использовать лишь в устаревших системах.
Форматируйте строки грамотно — это сделает ваш код понятным, интерфейс — опрятным, а данные — наглядными. Это навык, который стоит прокачивать и использовать ежедневно.
FAQ
Что лучше использовать: f-строки или .format()?
Рекомендуются f-строки — они читаемее и быстрее.
Как округлить число до 3 знаков?f"{value:.3f}"
Как вывести процент?f"{ratio:.2%}"
— умножит значение на 100 и добавит %.
Как сделать таблицу из строк?
С помощью выравнивания: f"{value:<10}"
А если Python < 3.6?
Используйте .format()
— он работает с Python 2.7+