Форматный вывод в Python

Опубликовано: 07.04.2026
Категория: Python
Теги: #Python
Просмотров: 41

Умение красиво и информативно представить данные — половина успеха любой программы. Будь то отчет для бизнес-аналитики, вывод научных расчетов или просто логгирование, читаемый вывод играет ключевую роль. В 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-строка вычисляется мгновенно и не может быть шаблоном, загруженным из файла.

  • Если пишете однострочный скрипт или поддерживаете старый код: используйте %, просто зная, как это работает.