Перейти к содержимому
Теория · Строки · урок 7 из 10

f-строки

Представьте бланк с пропусками: «Привет, ____. Итого: ____». Вы вписываете в пропуски имя и сумму и получаете готовый текст. Сам бланк при этом остаётся одним и тем же для любого покупателя.

В Python такой бланк называют f-строкой. В её пропусках стоят имена и выражения, а Python сам вписывает туда их значения.

Без бланка строку с числами собирают через +. Тогда каждое число приходится превращать в текст через str(), а пробелы — не забыть внутри кавычек. Сравните два способа:

Python
name = "Anna"
total = 1250
print("Hi, " + name + ". Total: " + str(total))  # Hi, Anna. Total: 1250
print(f"Hi, {name}. Total: {total}")  # Hi, Anna. Total: 1250

Давайте разберём обе строки:

  1. Первый print склеивает четыре куска через +, а число total сначала превращает в текст через str(total).
  2. Второй print пишет тот же текст одной f-строкой: значения стоят там же, где окажутся в тексте.

Поля подстановки

f-строка — строка с буквой f перед открывающей кавычкой. Фигурные скобки в ней — поле подстановки, тот самый пропуск в бланке. Python вычисляет то, что стоит внутри, превращает результат в текст и вставляет на место скобок. Получается обычная строка типа str.

В скобках может стоять любое выражение:

  • арифметика: {qty * price};
  • вызов функции: {len(name)};
  • вызов метода: {name.upper()};
  • индекс или срез: f"{name[0]}. {name[1:]}" даёт A. nna.
Python
price = 19.5
qty = 3
print(f"{qty} x {price} = {qty * price}")  # 3 x 19.5 = 58.5
print(f"{name.upper()} has {len(name)} letters")  # ANNA has 4 letters

Выражение вычисляется один раз — когда выполнение доходит до f-строки. Если потом изменить qty, уже готовая строка останется прежней.

Здесь аналогия с бланком заканчивается. Бумажный бланк можно заполнить ещё раз для другого покупателя. У готовой f-строки пропусков больше нет: это обычная строка с уже вписанным текстом. Чтобы получить текст с новыми значениями, f-строку выполняют заново.

Формат после двоеточия

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

Знаки после точки

.2f выводит число с двумя цифрами после точки и округляет его. Буква f здесь означает запись с фиксированной точкой и с буквой перед кавычкой не связана. Другие варианты:

  • .0f округляет до целого и не печатает точку;
  • целое число с .1f получает дробную часть: 42.0.

Ширина и выравнивание

>5 выравнивает значение по правому краю и дополняет его пробелами до ширины 5 символов, а <5 — по левому. Значение длиннее заданной ширины не обрезается: f"{12345:>3}" даёт 12345. Так печатают ровные столбцы в таблицах и чеках.

Python
pi = 3.14159
n = 42
print(f"{pi:.2f} {pi:.0f} {n:.1f}")  # 3.14 3 42.0
print(f"[{n:>5}] [{n:<5}]")  # [   42] [42   ]
print(f"[{pi * 2:>8.3f}]")  # [   6.283]

Спецификация меняет только текст: переменная pi по-прежнему равна 3.14159. Её можно применить и к результату выражения, как в последней строке:

  1. Сначала вычисляется pi * 2.
  2. Затем число округляется до трёх цифр после точки.
  3. Наконец, оно выравнивается по правому краю в поле ширины 8.

Чтобы напечатать саму фигурную скобку, её удваивают: f"{{n}}" даёт {n}.

Частая ошибка

Забыли букву f перед кавычкой:

Python
total = 1250
print("Total: {total}")  # ✗

Ошибки нет, но печатается Total: {total}. Без f фигурные скобки — обычные символы строки, и Python ничего в них не подставляет. Исправление — добавить букву: f"Total: {total}" даёт Total: 1250.

Главное

  • f-строка начинается с буквы f, а выражения в {} Python вычисляет и вставляет в текст.
  • Выражение вычисляется один раз, когда выполнение доходит до f-строки.
  • После двоеточия стоит формат: .2f — две цифры после точки, >5 — ширина 5 по правому краю.
  • Без буквы f фигурные скобки остаются обычными символами.

Подпишись, чтобы пройти курс

Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.

Войти другим способом