Форматный вывод в Python
Умение красиво и информативно представить данные — половина успеха любой программы. Будь то отчет для бизнес-аналитики, вывод научных расчетов или просто логгирование, читаемый вывод играет ключевую роль. В Python существует целых три основных способа управления выводом, каждый из которых хорош для своих задач. В этой статье мы подробно разберем все три подхода: от старомодного % до современных f-строк, ставших стандартом современного Python.
Способ 1: f-строки (Formatted String Literals) — Современный стандарт
Доступность: Python 3.6+
Синтаксис: Префикс f или F перед строкой и выражения внутри {}.
Этот метод считается самым читаемым и быстрым на сегодняшний день. Вы прямо на месте пишете имя переменной или выражение внутри фигурных скобок.
1. Базовое использование
name = "Алексей"
age = 32
print(f"Меня зовут {name} и мне {age} года.")
# Вывод: Меня зовут Алексей и мне 32 года.
print(f"Через год мне будет {age + 1}.")
# Вывод: Через год мне будет 33.2. Форматирование чисел (Спецификаторы)
После переменной ставится двоеточие : и указывается формат.
-
.2f : Округление до 2 знаков после запятой.
-
,d : Разделитель тысяч для целых чисел.
-
.2% : Отображение в виде процентов.
import math
pi = math.pi
print(f"Число Пи с округлением: {pi:.3f}") # Вывод: 3.142
print(f"Число Пи с выравниванием: {pi:10.3f}") # Вывод: ' 3.142' (10 символов, по умолчанию вправо)
big_number = 1000000
print(f"Миллион с разделителем: {big_number:,d}") # Вывод: 1,000,000
rate = 0.2578
print(f"Доля: {rate:.2%}") # Вывод: 25.78%3. Выравнивание и заполнители
Используйте < (влево), > (вправо) или ^ (центр) для выравнивания текста в заданной ширине.
text = "Текст"
# Выравнивание по центру в 10 символов, заполнитель '*'
print(f"{text:*^10}") # Вывод: **Текст***
print(f"{text:>10}") # Вывод: ' Текст'4. Полезные фишки (Python 3.8+): =
Автоматически выводит имя переменной и её значение (удобно для дебага).
x = 5
y = 10
print(f"{x=}, {y=}, {x + y=}")
# Вывод: x=5, y=10, x + y=15Способ 2: Метод str.format() — мощь и гибкость
Доступность: Python 2.7 / 3.0+
Синтаксис: Строка с {} и вызов .format().
Этот метод является переходным звеном между старым и новым стилем. Он все еще активно используется, особенно в библиотеках, написанных до повсеместного внедрения f-строк.
1. Замена по позиции и по имени
# По позиции
print("Привет, {} и {}".format("Мир", "Python")) # Вывод: Привет, Мир и Python
print("Второй: {1}, Первый: {0}".format(10, 20)) # Вывод: Второй: 20, Первый: 10
# По имени (словари)
print("Имя: {name}, Возраст: {age}".format(name="Елена", age=25))2. Форматирование таблиц (Пример)
Отличный пример для вывода данных в столбик. Обратите внимание на {0:2d} — 0 это номер аргумента, 2 ширина, d целое число.
for x in range(1, 6):
# Квадрат числа (2 символа) и куб числа (3 символа)
print("{0:2d} -> {1:3d} -> {2:4d}".format(x, x*x, x*x*x))
# Вывод будет выровнен по правому краю
# 1 -> 1 -> 1
# 2 -> 4 -> 8
# ...3. Доступ к данным в словарях и списках
data = {'city': 'Москва', 'temp': 22}
print("Город: {0[city]}, Темп.: {0[temp]}".format(data))
# Или через ** (распаковка словаря)
print("Город: {city}, Темп.: {temp}".format(**data))Способ 3: % (printf-style) — наследие C
Доступность: Все версии Python.
Синтаксис: Аналогичен функции printf в языке C.
Этот метод считается устаревшим (Legacy). Новый код рекомендуется писать через f-строки или .format(), но старый код на % вы будете встречать постоянно, особенно в скриптах для Data Science и системных утилитах.
Таблица основных операторов:
| Символ | Назначение | Пример |
|---|---|---|
| %s | Строка (str) | "%s" % "Hi" |
| %d / %i | Целое число (int) | "%d" % 123 |
| %f | Число с плавающей точкой | "%f" % 123.45 |
| %.2f | Float с 2 знаками после запятой | "%.2f" % 123.456 → 123.46 |
| %x | Шестнадцатеричное число | "%x" % 255 → ff |
Использование:
name = "Иван"
score = 95.567
# Классика жанра
print("Результат %s: %.1f баллов." % (name, score))
# Вывод: Результат Иван: 95.6 баллов.Справочник: Спецификаторы формата (Мини-язык)
Для методов f-строк и .format() используется единый стандарт форматирования. Синтаксис внутри фигурных скобок выглядит так:
{ [имя] : [[fill]align][sign][#][0][width][grouping_option][.precision][type] }
Разберем ключевые параметры:
1. Выравнивание (align)
| Код | Действие |
|---|---|
| < | Выравнивание по левому краю. |
| > | Выравнивание по правому краю (по умолчанию для чисел). |
| ^ | Выравнивание по центру. |
| = | Заполнитель после знака (только для чисел). Пример: {-5:0=5d} → -0005 |
2. Знаки (sign)
| Код | Действие |
|---|---|
| + | Знак всегда отображается (+5, -5). |
| - | Знак только для отрицательных (5, -5). |
| (пробел) | Пробел перед положительным числом ( 5, -5). |
3. Типы данных (type)
| Код | Назначение | Пример (f"{x:type}") |
|---|---|---|
| d | Десятичное целое число. | 10 |
| b | Двоичное число. | 1010 |
| x | Шестнадцатеричное (строчные). | a |
| e | Экспоненциальная запись. | 1.23e+02 |
| f | Число с плавающей точкой. | 123.450000 |
| % | Проценты. | 12345.00% |
Пример сложного форматирования:
value = -1234.567
# Ширина 10, знак всегда (+/-), разделитель тысяч (,), 2 знака после точки
print(f"{value: >+10,.2f}")
# Вывод: ' -1,234.57'Заключение
-
Для нового кода: всегда используйте f-строки. Это быстро, чисто и интуитивно.
-
Если строка является шаблоном (переменной): используйте str.format(), так как f-строка вычисляется мгновенно и не может быть шаблоном, загруженным из файла.
-
Если пишете однострочный скрипт или поддерживаете старый код: используйте %, просто зная, как это работает.