f-строки
Представьте бланк с пропусками: «Привет, ____. Итого: ____». Вы вписываете в пропуски имя и сумму и получаете готовый текст. Сам бланк при этом остаётся одним и тем же для любого покупателя.
В Python такой бланк называют f-строкой. В её пропусках стоят имена и выражения, а Python сам вписывает туда их значения.
Без бланка строку с числами собирают через +. Тогда каждое число приходится превращать в текст через str(), а пробелы — не забыть внутри кавычек. Сравните два способа:
name = "Anna"
total = 1250
print("Hi, " + name + ". Total: " + str(total)) # Hi, Anna. Total: 1250
print(f"Hi, {name}. Total: {total}") # Hi, Anna. Total: 1250Давайте разберём обе строки:
- Первый
printсклеивает четыре куска через+, а числоtotalсначала превращает в текст черезstr(total). - Второй
printпишет тот же текст одной f-строкой: значения стоят там же, где окажутся в тексте.
Поля подстановки
f-строка — строка с буквой f перед открывающей кавычкой. Фигурные скобки в ней — поле подстановки, тот самый пропуск в бланке. Python вычисляет то, что стоит внутри, превращает результат в текст и вставляет на место скобок. Получается обычная строка типа str.
В скобках может стоять любое выражение:
- арифметика:
{qty * price}; - вызов функции:
{len(name)}; - вызов метода:
{name.upper()}; - индекс или срез:
f"{name[0]}. {name[1:]}"даётA. nna.
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. Так печатают ровные столбцы в таблицах и чеках.
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. Её можно применить и к результату выражения, как в последней строке:
- Сначала вычисляется
pi * 2. - Затем число округляется до трёх цифр после точки.
- Наконец, оно выравнивается по правому краю в поле ширины 8.
Чтобы напечатать саму фигурную скобку, её удваивают: f"{{n}}" даёт {n}.
Частая ошибка
Забыли букву f перед кавычкой:
total = 1250
print("Total: {total}") # ✗Ошибки нет, но печатается Total: {total}. Без f фигурные скобки — обычные символы строки, и Python ничего в них не подставляет. Исправление — добавить букву: f"Total: {total}" даёт Total: 1250.
Главное
- f-строка начинается с буквы
f, а выражения в{}Python вычисляет и вставляет в текст. - Выражение вычисляется один раз, когда выполнение доходит до f-строки.
- После двоеточия стоит формат:
.2f— две цифры после точки,>5— ширина 5 по правому краю. - Без буквы
fфигурные скобки остаются обычными символами.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.