Глиф Учебники

f-строки и форматирование вывода

Справочник · Python · 1 минута чтения

f-строка — строка с буквой f перед кавычкой. Всё, что стоит в ней в фигурных скобках, Python вычисляет и подставляет в текст:

Python
name = "Аня"
score = 9.456
print(f"{name}: {score:.1f} баллов")
print(f"Через год будет {15 + 1} лет")
Вывод
Аня: 9.5 баллов
Через год будет 16 лет

После значения через двоеточие можно указать формат: :.1f — один знак после точки. Число при этом округляется только для вывода, сама переменная не меняется.

Основные форматы

Квадратные скобки в примере нужны, чтобы были видны пробелы:

Python
n = 42
x = 3.14159
s = "Минск"
print(f"[{x:.2f}]")
print(f"[{n:6}]")
print(f"[{n:<6}]")
print(f"[{s:>8}]")
print(f"[{s:^9}]")
print(f"[{n:06}]")
print(f"[{1234567:,}]")
print(f"[{1234567:_}]")
print(f"[{0.256:.1%}]")
print(f"[{n:b}] [{n:x}]")
Вывод
[3.14]
[    42]
[42    ]
[   Минск]
[  Минск  ]
[000042]
[1,234,567]
[1_234_567]
[25.6%]
[101010] [2a]
ФорматЧто делает
:.2fдва знака после точки
:6ширина поля 6 знаков; числа прижимаются вправо, строки влево
:<6, :>6, :^6прижать влево, вправо, по центру
:06дополнить число нулями слева до 6 знаков
:, и :_разделить тысячи запятой или подчёркиванием
:.1%умножить на 100 и вывести со знаком процента
:b, :xв двоичной и шестнадцатеричной системе

Ширину и точность можно сочетать: :8.2f — восемь знаков всего, из них два после точки.

Таблица со столбцами

Python
goods = [("Хлеб", 1.45), ("Молоко", 2.3), ("Сыр", 12.9)]
for name, price in goods:
    print(f"{name:<10}{price:>6.2f}")
Вывод
Хлеб        1.45
Молоко      2.30
Сыр        12.90

Название прижато влево в поле из 10 знаков, цена — вправо в поле из 6 знаков с двумя знаками после точки, поэтому столбцы ровные.

Тысячи через пробел

В русских текстах тысячи разделяют пробелом. Готового формата для этого нет, но можно заменить запятую:

Python
total = 1234567
print(f"{total:,}".replace(",", " "))
Вывод
1 234 567

Проверка значения: знак =

Знак = после выражения выводит и само выражение, и его значение — удобно при поиске ошибок:

Python
a = 7
b = 3
print(f"{a * b = }")
Вывод
a * b = 21

Подводные камни

Старые способы

В чужих программах встречаются способы, появившиеся раньше f-строк. Они работают и сейчас:

Python
name = "Аня"
age = 15
print("{} — {} лет".format(name, age))
print("%s — %d лет" % (name, age))
print("Цена: {:.2f}".format(2.5))
Вывод
Аня — 15 лет
Аня — 15 лет
Цена: 2.50

Форматы после двоеточия в format те же, что в f-строках. В новых программах проще писать f-строки. Об округлении чисел — в справке Как округлить число.