Форматирование строк в Python: f-строки, format() и оператор %
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
Представьте, что вы печатаете чек для кофейни. Нужно собрать название товара, цену и количество в одну аккуратную строку. Можно склеивать строки через +, но код быстро превращается в кашу.
Форматирование строк похоже на бланк с пропусками. Вы один раз пишете структуру предложения, а затем подставляете значения туда, где им место. Так чище, быстрее и гораздо легче читать.
В Python есть три способа форматировать строки: f-строки, метод `.format()` и оператор `%`. В этом уроке вы освоите все три и узнаете, какой из них когда использовать.
Почему форматирование строк лучше конкатенации
Когда новички впервые соединяют переменные с текстом, они берутся за оператор +. Это работает, но приходится вручную превращать числа в строки и расставлять знаки + повсюду.
name = "Latte"
price = 4.5
qty = 2
print("Item: " + name + " | Price: $" + str(price) + " | Qty: " + str(qty))name = "Latte"
price = 4.5
qty = 2
print(f"Item: {name} | Price: ${price} | Qty: {qty}")Обе строки выводят одно и то же. Но вариант с f-строкой короче, его легче читать, и вам никогда не придётся самостоятельно вызывать str(). Python выполняет преобразование автоматически.
Как использовать f-строки в Python
f-строка (форматированный строковый литерал) начинается с буквы f перед открывающей кавычкой. Внутри строки переменные или выражения записываются в фигурных скобках {}.
Python вычисляет то, что стоит внутри скобок, и вставляет результат в строку. f-строки появились в Python 3.6 и сейчас считаются рекомендуемым способом форматирования строк.
My name is Alice. I am 30 years old. I live in Seattle.
Всё дело в букве f перед кавычками. Без неё Python вывел бы текст {name} как есть, а не значение переменной.
Hello, {name}!
Hello, Alice!Какие выражения можно писать внутри f-строк?
f-строки не ограничиваются простыми переменными. В фигурные скобки можно поместить любое допустимое выражение Python: арифметику, вызовы функций и методов и даже условные выражения.
Area: 50 square units Uppercase: PYTHON Result: Pass
Представьте каждую пару {} как маленький калькулятор. Python вычисляет выражение, превращает результат в строку и ставит его на место.
Как форматировать числа в f-строках Python
Здесь f-строки по-настоящему блистают. После имени переменной ставится двоеточие :, а за ним спецификатор формата, который определяет, как будет выглядеть число.
Знаки после запятой: .Nf
Используйте :.Nf, чтобы показать ровно N знаков после запятой. Буква f означает запись с фиксированной точкой (fixed-point). Без этого не обойтись при выводе цен, размеров и результатов.
Price: $4.50 Pi: 3.1416 Rounded: 3.1
Разделители разрядов для больших чисел
Используйте :,, чтобы разделить разряды большого числа запятыми. Так числа вроде 1000000 гораздо легче прочитать с одного взгляда.
Population: 8,900,000 Salary: $75,000.50
Проценты с помощью %
Используйте :.N%, чтобы показать десятичную дробь в процентах. Python сам умножит значение на 100 и добавит знак %.
Progress: 75.6% Tax rate: 8.25%
Ширина поля и выравнивание
Можно задать минимальную ширину для значения и выбрать выравнивание: по левому краю, по правому краю или по центру. Это идеально подходит для аккуратного выровненного вывода, например таблиц.
|Left | | Center | | Right| | 42| |0000000042|
Как использовать метод .format()
До появления f-строк разработчики на Python пользовались методом .format(). В строку ставятся пустые заполнители {}, а затем вызывается .format() со значениями, которые нужно подставить.
Hello, Bob! You are 25 years old. Hello, Bob! You are 25 years old. Nice to meet you, Bob! Hello, Bob! You are 25 years old.
Метод .format() поддерживает те же спецификаторы формата, что и f-строки. Всё, что стоит после двоеточия, работает точно так же.
Price: $19.99 Big number: 1,000,000
Нумерованные позиции удобны, когда одно значение нужно повторить в строке несколько раз. На один и тот же индекс можно ссылаться сколько угодно раз.
Оператор % для форматирования строк (старый стиль)
Оператор % является самым старым способом форматирования строк в Python. Он позаимствован у функции printf из языка C. Вы встретите его в старом коде и должны его узнавать, но в новом коде использовать его не нужно.
Hello, Charlie! You are 35 years old. Price: $9.99
%s означает «вставить сюда строку», %d означает «вставить целое число», а %f означает «вставить число с плавающей точкой». Сами значения указываются в конце, после оператора %.
f-строки, format() или оператор %: что выбрать?
Все три подхода дают одинаковый результат. Разница в читаемости и удобстве. Вот один и тот же вывод, записанный тремя способами:
Coffee: $4.50 Coffee: $4.50 Coffee: $4.50
Многострочные f-строки и приёмы из реальных программ
Для длинных форматированных строк можно использовать тройные кавычки с префиксом f. Это удобно для многострочных сообщений, отчётов и шаблонов писем.
Hi Alice, Your order #4821 has been confirmed. Total: $37.50 Thank you for shopping with us!
Вот практический пример: построение отформатированной таблицы. Благодаря спецификаторам выравнивания все столбцы выстраиваются ровно.
Product Price Qty Total ------------------------------------- Laptop 999.99 1 999.99 Mouse 29.50 3 88.50 Keyboard 74.00 2 148.00
x=42 y=17 x + y=59
Практические упражнения
Создайте переменную item со значением "Cappuccino" и переменную price со значением 4.5. Затем с помощью f-строки выведите строку чека точно в таком виде:
Cappuccino .......... $4.50Название товара должно стоять слева, а цена должна выводиться ровно с 2 знаками после запятой. Между названием и ценой используйте строку " .......... $".
Создайте переменную population со значением 7900000000. Выведите её с помощью f-строки с запятыми между разрядами, чтобы получилось:
World population: 7,900,000,000Создайте три переменные: name = "Alice", score = 95.8 и grade = "A+". Выведите отформатированную строку таблицы, в которой:
Ожидаемый вывод (символы | входят в вывод):
| Alice | 95.8 | A+ |Код ниже должен выводить "Hello, Sam! You scored 92.5%.", но в нём есть ошибки. Найдите и исправьте их.
Нужно исправить 2 ошибки.
Создайте переменные:
first_name = "Jordan"items = 3total = 89.95Затем с помощью многострочной f-строки (в тройных кавычках) выведите точно такое сообщение:
Hi Jordan,
Thank you for your purchase of 3 items.
Your total is $89.95.
Have a great day!Проследите, чтобы сумма выводилась ровно с 2 знаками после запятой.