Как форматировать строку через f-string в Python?
Видел в коде строки с буквой f перед кавычками и фигурными скобками внутри. Как это работает? Хочу подставлять переменные в текст и выводить число с двумя знаками после запятой. Чем f-string лучше старого форматирования?
2 ответа
f-string — это строка с буквой f перед кавычками, где в {...} можно вставлять переменные и выражения прямо по имени:
name = 'Аня'
age = 30
print(f'Меня зовут {name}, мне {age} лет')
Внутри скобок можно писать любые выражения и вызовы:
print(f'Через год будет {age + 1}')
print(f'Имя заглавными: {name.upper()}')
Форматирование чисел задаётся после двоеточия:
pi = 3.14159
print(f'{pi:.2f}') # 3.14 — два знака после точки
print(f'{1000000:,}') # 1,000,000 — разделитель тысяч
print(f'{0.25:.0%}') # 25% — проценты
print(f'{42:5}') # ' 42' — ширина 5, выравнивание вправо
print(f'{42:<5}') # '42 ' — влево
print(f'{255:x}') # ff — в шестнадцатеричном виде
Чем f-string лучше старого '%s' % x и .format(): видно, какая переменная куда идёт, прямо в тексте — не надо считать позиции аргументов. Код читается как обычное предложение.
Частые ошибки:
- Забыть букву
f— тогда{name}напечатается буквально, без подстановки. - Чтобы вывести саму фигурную скобку, удвойте её:
f'{{}}'даст{}. - Внутри
{}нельзя использовать кавычки того же типа, что и у всей строки — берите другой тип или экранируйте.
f-string доступны с Python 3.6 и сегодня это стандарт.
Полезный трюк для отладки (Python 3.8+) — знак = внутри скобок печатает и имя, и значение:
x = 42
print(f'{x=}') # x=42
print(f'{x * 2 = }') # x * 2 = 84
Очень удобно вместо print('x =', x) — не надо дублировать имя переменной вручную. Экономит время при поиске багов.