Форматирование строк Python
Операции форматирования, описанные здесь (оператор %), демонстрируют ряд особенностей, которые приводят к ряду распространенных ошибок [...]. Использование более новых литералов строк с форматированием [...] помогает избежать этих ошибок. Эти альтернативы также предоставляют более мощные, гибкие и расширяемые подходы к форматированию текста.
% operator
Предпочитайте строковые литералы
Для нового кода настоятельно рекомендуется использовать str.format или литералы строк с форматированием (Python 3.6+) вместо оператора %.
# % operator: форматирование строк старого стиля (не рекомендуется для нового кода)
name = 'Pete'
'Hello %s' % name # %s = строковый заполнитель
"Hello Pete"
Мы можем использовать спецификатор формата %d для преобразования целочисленного значения в строку:
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
В Python 3 был представлен новый способ форматирования строк, который позже был обратно портирован в Python 2.7. Это делает синтаксис форматирования строк более упорядоченным.
# Метод str.format(): современное форматирование строк (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = заполнитель
"Hello I'm John, my age is 20"
"Hello I'm {0}, my age is {1}".format(name, age)
"Hello I'm John, my age is 20"
Литералы строк с форматированием или f-строки
Если вы используете Python 3.6+, строковые f-строки являются рекомендуемым способом форматирования строк.
Литерал строки с форматированием, или f-строка, — это строковый литерал, которому предшествует префикс f или F. Эти строки могут содержать поля для замены, которые представляют собой выражения, ограниченные фигурными скобками {}. В то время как другие строковые литералы всегда имеют постоянное значение, форматированные строки на самом деле являются выражениями, вычисляемыми во время выполнения.
# f-string: рекомендуемый способ форматирования строк (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # префикс f позволяет использовать выражения в {}
'Hello Elizabeth!'
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
fmtf или FformatstrВ них даже можно выполнять встроенные вычисления:
# f-строки поддерживают выражения: могут включать вычисления внутри {}
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # Вычисляет выражения
'Five plus ten is 15 and not 30.'
Многострочные f-строки
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
Спецификатор =
Это выведет выражение и его значение:
# Спецификатор =: выводит как имя переменной, так и значение (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # Выводит "now='Nov/14/2022 - 20:50:01'"
"date and time: now='Nov/14/2022 - 20:50:01'"
Добавление пробелов или символов
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
Форматирование цифр
Добавление разделителя тысяч
a = 10000000
f"{a:,}"
'10,000,000'
Округление
a = 3.1415926
f"{a:.2f}"
'3.14'
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
f"{a:.2f}"?Отображение в виде процента
a = 0.816562
f"{a:.2%}"
'81.66%'
Таблица форматирования чисел
| Число | Формат | Вывод | Описание |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | Формат float, 2 знака после запятой |
| 3.1415926 | {:+.2f} | +3.14 | Формат float, 2 знака после запятой, со знаком |
| -1 | {:+.2f} | -1.00 | Формат float, 2 знака после запятой, со знаком |
| 2.71828 | {:.0f} | 3 | Формат float без знаков после запятой |
| 4 | {:0>2d} | 04 | Дополнение нулями (дополнение слева, ширина 2) |
| 4 | {:x<4d} | 4xxx | Дополнение символами x (дополнение справа, ширина 4) |
| 10 | {:x<4d} | 10xx | Дополнение символами x (дополнение справа, ширина 4) |
| 1000000 | {:,} | 1,000,000 | Формат числа с запятой в качестве разделителя |
| 0.35 | {:.2%} | 35.00% | Формат процента |
| 1000000000 | {:.2e} | 1.00e+09 | Экспоненциальная нотация |
| 11 | {:11d} | 11 | Выравнивание по правому краю (по умолчанию, ширина 10) |
| 11 | {:<11d} | 11 | Выравнивание по левому краю (ширина 10) |
| 11 | {:^11d} | 11 | Выравнивание по центру (ширина 10) |
Строки-шаблоны (Template Strings)
Более простой и менее мощный механизм, но он рекомендуется при работе со строками, генерируемыми пользователями. Благодаря своей меньшей сложности строковые шаблоны являются более безопасным выбором.
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'