Перейти к содержанию

412 уроков, 25 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 3 из 20 Начальный 20 мин 110 XP

f-строки: вставить значение в текст

f-строка вставляет значение прямо в текст: f'Привет, {name}!' — без плюсов, скобок и str(). Внутри фигурных скобок работает любое выражение Python. Учимся читать и писать их свободно.

Редакция Питоники

Из урока 1 мы умеем собирать текст конкатенацией. Посмотрим, как это выглядит на практике, когда в сообщение нужно вставить пару значений:

сборка текста плюсами
name = 'Аня'
age = 20
message = 'Привет, ' + name + '! Тебе ' + str(age) + ' лет.'
print(message)
Вывод
Привет, Аня! Тебе 20 лет.

Работает — но как читается: четыре плюса, кавычки рвут текст на части, а про str(age) легко забыть и получить TypeError. Для такой частой задачи — «вставить значения в текст» — Python предлагает инструмент получше.

f-строка: буква f и фигурные скобки

Поставь букву f перед кавычками — и строка станет f-строкой: всё, что в фигурных скобках, Python вычислит и вставит в текст. Это называется интерполяция — подстановка значений внутрь шаблона:

та же фраза через f-строку
name = 'Аня'
age = 20
message = f'Привет, {name}! Тебе {age} лет.'
print(message)
Вывод
Привет, Аня! Тебе 20 лет.

Одна строка вместо конкатенации из пяти кусков, и текст читается слева направо, как обычное предложение. Число age вставилось без всякого str() — f-строка конвертирует значения сама. Фигурные скобки при этом исчезают: на их месте оказывается вычисленное значение.

Внутри скобок работает любое выражение

Главное, что делает f-строки мощными: в фигурных скобках стоит не «имя переменной», а любое выражение Python. Сумма, вызов метода, обращение к элементу списка — всё вычисляется прямо внутри строки:

выражения внутри скобок
prices = [120, 80, 45]
name = 'питон'
print(f'Сумма: {sum(prices)}')
print(f'Кричим: {name.upper()}!')
print(f'Длина: {len(name)} букв')
Вывод
Сумма: 245
Кричим: ПИТОН!
Длина: 5 букв

sum(prices) посчитал сумму списка, name.upper() крикнул заглавными, len(name) посчитал буквы — и всё это без единой промежуточной переменной. Арифметика тоже работает:

вычисления в шаблоне
ticket = 350
count = 3
print(f'{count} билета стоят {ticket * count} руб.')
Вывод
3 билета стоят 1050 руб.
забыли f
name = 'Аня'
print('Привет, {name}!')
Вывод
Привет, {name}!

Почему f-строки — стандарт

До f-строк в Python жили два способа: метод format() и старый процентный стиль %s. F-строки появились в Python 3.6 и быстро вытеснили оба — вот почему:

  • читаемость: шаблон читается слева направо как обычный текст, значения видны на своих местах, а не в конце строки аргументов;
  • выражения внутри: {sum(prices)} считает на месте — format() заставляет выносить вычисления в аргументы;
  • скорость: f-строки быстрее format() и процентов — интерпретатор собирает строку эффективнее;
  • краткость: ни плюсов, ни str(), ни индексов-подстановок вроде {0} — только текст и скобки.

Старые способы никуда не делись: чужой код с format() и %s встречается постоянно, их разбор — в уроке 12. Но в новом коде стандарт — f-строки.

Сценарий: письмо клиенту

В боте интернет-магазина каждое письмо собирается из трёх-четырёх кусков: имя клиента, номер заказа, сумма и дата. С конкатенацией такая сборка выглядит тремя строками кода, а в шаблоне письма — ещё и мучительными склейками на каждом абзаце. С f-строками шаблон читается как обычный текст, в котором просто стоят значения.

письмо клиенту одной строкой
name = 'Анна'
order_id = 'ORD-2026-0042'
total = 2450.50

letter = f'Здравствуйте, {name}! Заказ {order_id} на сумму {total:.2f} руб. ждёт оплаты.'
print(letter)
Вывод
Здравствуйте, Анна! Заказ ORD-2026-0042 на сумму 2450.50 руб. ждёт оплаты.

Что именно делает буква f

Буква f не меняет строку — она меняет то, как Python её собирает. Обычная строка со скобками остаётся текстом, а f-строка разбирается на части: текстовые куски идут в результат как есть, а на месте каждой пары фигурных скобок появляется значение выражения, которое внутри них стоит. Сами скобки в результате не остаются.

И сразу важное следствие: f-строка — не объект-шаблон, который можно переиспользовать с другими данными. Подставив значения, она становится обычной строкой. Для переиспользуемого шаблона нужен метод format — о нём отдельный урок.

Скобки внутри скобок: как вставить фигурные

Иногда в тексте нужны собственные фигурные скобки — например, заготовка с плейсхолдером для стороннего сервиса или пример синтаксиса JSON. Внутри f-строки двойные скобки экранируются: {{ превращается в {, а }} — в }.

экранирование скобок
print(f'{{name}} — это имя переменной')
print(f'{{{1 + 2}}}')
Вывод
{name} — это имя переменной
{3}

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

Значения часто лежат в словаре, и доставать их прямо в скобках f-строки удобнее, чем писать user['city'] заранее отдельной строкой. Работает и так, и так — просто первый вариант короче и не плодит промежуточных переменных.

значение по ключу
user = {'name': 'Анна', 'city': 'Казань'}
print(f"Клиент из {user['city']}")
Вывод
Клиент из Казань
Внутри скобокПримерЧто получится
Переменную{name}значение name
Выражение{price * 2}вычисленный результат
Вызов метода{name.upper()}АННА
Элемент списка{prices[0]}первая цена
Ключ словаря{user['city']}значение по ключу
Спецификацию{total:.2f}2450.50

Шесть строк таблицы — это шесть способов наполнить скобки, но все они работают по одному правилу: внутри фигурных скобок Python ждёт выражение, а не имя. Как только вы это поняли, вопросов больше не остаётся.

обращение к элементу списка
prices = [120, 80, 45]
print(f'Первая цена: {prices[0]} руб.')
Вывод
Первая цена: 120 руб.

Двоеточие после значения

Иногда значение нужно не просто вставить, а оформить: цену — с двумя знаками после точки, число — с разделителями тысяч. Для этого после выражения ставится двоеточие и формат-спецификация — короткий код, который говорит, как оформить значение:

спецификация после двоеточия
prices = [120, 80, 45]
avg = sum(prices) / len(prices)
print(f'Средняя: {avg}')
print(f'Средняя: {avg:.2f}')
Вывод
Средняя: 81.66666666666667
Средняя: 81.67

Первая строка честно показала весь бесконечный хвост деления, вторая — оформила число до двух знаков. Спецификация {avg:.2f} читается так: значение avg оформи как число с плавающей точкой (f) с двумя знаками после точки (.2). Это целая мини-грамматика — точность, ширина, выравнивание, знаки, — и ей посвящён урок 4.

Мини-практика: шаблон чека

Соберём маленький чек целиком: номер заказа, клиент, состав заказа и итог с двумя знаками. Обратите внимание на две разные склейки: позиции списка собираются через join, а всё остальное подставляется в f-строку.

чек из четырёх строк
order_id = 'ORD-2026-0042'
client = 'Анна'
items = ['чай', 'кофе']
total = 2450.5

print(f'Заказ {order_id}')
print(f'Клиент: {client}')
print('Состав: ' + ', '.join(items))
print(f'Итого: {total:.2f} руб.')
Вывод
Заказ ORD-2026-0042
Клиент: Анна
Состав: чай, кофе
Итого: 2450.50 руб.

Почему f-строка быстрее — и где она дороже

Замеры на одном и том же шаблоне дают разницу в десятки процентов: format() разбирает шаблон заново при каждом вызове, а f-строка разбирается один раз — при компиляции файла. На коротких примерах разницу не видно, и это нормально: выигрыш становится заметен, когда шаблон собирают в цикле десятки тысяч раз.

До версии 3.12 f-строка внутри собиралась через механизм format, и часть выигрыша терялась. Начиная с 3.12 (PEP 701) у f-строк собственный компилятор — на новых версиях они ощутимо быстрее предшественников.

Обратная сторона: выражение внутри скобок вычисляется каждый раз, когда строка создаётся. Если оно дорогое — запрос к базе, форматирование большого отчёта, — не стоит писать его прямо в шаблоне, который пересоздаётся в цикле. Посчитали заранее, положили в переменную, подставили готововое значение.

Три правила, из которых следует всё остальное

Буква f перед кавычками — иначе скобки останутся текстом. Внутри скобок — любое выражение Python, а не только имя переменной. Двоеточие после выражения — и включается оформление значения. Всё, что мы разобрали дальше, — частные случаи этих трёх правил. Дальше по разделу: разобрать готовый текст на части поможет split из урока 9, а собрать строку из кусков — join из урока 10.

f-строка — это шаблон: буква f перед кавычками, значения в фигурных скобках, любое выражение Python вычисляется прямо внутри текста.

Что выведет код?

Сначала предскажи ответ в голове — это главный навык программиста.

a = 5
b = 3
print(f'{a} умножить на {b} будет {a * b}')
name = 'мир'
print(f'Привет, {name.upper()}!')
print(f'{2 + 2}{2 * 2}')
Проверь себя
0 / 7

1. Что выведет print(f'2 + 2 = {2 + 2}')?

2. Что делает буква f перед кавычками?

3. Что выведет print(f'{name.upper()}'), если name = 'кот'?

4. Что выведет print('{name}'), если name = 'Аня'?

5. С какой версии Python доступны f-строки?

6. Что выведет print(f'{{{1 + 2}}}')?

7. Почему запись f'город {user['city']}' не работает в Python 3.11?

Карточки терминов
Запомнено: 0 / 9
Практика

Переменные city = 'Москва' и temp = -3 уже заданы. С помощью f-строк выведи две строки: «Город: Москва, температура: -3» и «Длина названия: 6 букв» — длину посчитай прямо в скобках через len().

practice.py
Вопросы и ответы по уроку

Как вставить переменную в строку в Python?

F-строкой: поставь f перед кавычками и оберни имя переменной в фигурные скобки — f'Привет, {name}!'. Стандартная альтернатива — конкатенация через str(), но она громоздка: 'Привет, ' + name. F-строки доступны с Python 3.6 и считаются стандартом.

Урок 4: формат-спецификации

Можно ли вызывать методы и функции внутри f-строки?

Да, внутри фигурных скобок работает любое выражение Python: f'{name.upper()}', f'{sum(prices)}', f'{len(name)} букв'. Значение вычисляется в момент сборки строки. Для сложной логики лучше посчитать в переменную заранее, чтобы шаблон оставался читаемым.

Что делать, если f-строка выводит фигурные скобки?

Вы забыли букву f перед кавычками: строка '{name}' — обычный текст, и скобки печатаются как есть. Добавьте f: f'{name}' — и подстановка заработает. Это самый частый сюрприз новичка при переходе на f-строки.

Урок 1: строки как данные

Чем f-строки лучше format() и %s?

Тремя вещами: читаемость (текст читается слева направо, значения на своих местах), возможность писать выражения прямо в скобках и скорость — f-строки быстрее обоих предшественников. format() и процентный стиль остаются в чужом коде и разбираются отдельно.

Урок 12: format() и старый процент

Как вставить в текст фигурные скобки?

Экранировать их удвоением: f'{{name}}' напечатает {name}, а f'{{{1 + 2}}}' даст {3}. Одинарные скобки внутри f-строки — это placeholders, двойные — обычный текст.

Можно ли сохранить f-строку как шаблон и заполнять её разными данными?

Нет: значения подставляются в момент создания строки, и дальше это обычная строка. Для повторного использования заготовки нужен метод format с пустотами в шаблоне — разбор в уроке 12.

Урок 12: format() и старый процент

Понравился урок? Сошлитесь на него

«Для такой частой задачи — «вставить значения в текст» — Python предлагает инструмент получше.»

Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Что дальше

Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.