Format: примеры (PYTHON)
format(value[, format_spec]): strБазовая информация о функции format
Функция format() в Python предназначена для форматирования строк и других объектов. Ее используют, когда требуется преобразовать значение в строку с определенным форматированием, например, для вывода чисел с заданной точностью, выравнивания текста или представления данных в специфическом формате.
Синтаксис функции: format(value, format_spec=''). Первый аргумент value - объект, который нужно отформатировать. Второй аргумент format_spec - необязательная строка, задающая спецификацию форматирования. Если она опущена, функция эквивалентна вызову str(value). Возвращаемое значение - строка, представляющая отформатированный объект.
Спецификация формата имеет общий вид: [[fill]align][sign][#][0][width][grouping_option][.precision][type]. Каждая часть отвечает за аспект форматирования:
- fill: символ-заполнитель (по умолчанию пробел).
- align: выравнивание:
<(влево),>(вправо),^(по центру),=(знак и число разделяются заполнителем). - sign: отображение знака:
+(всегда показывать),-(только отрицательные, по умолчанию), пробел (пробел для положительных). - #: альтернативная форма вывода (например, префикс
0bдля двоичных чисел). - 0: дополнение нулями (эквивалентно
fillсо значением0иalignсо значением=). - width: минимальная ширина поля.
- grouping_option: разделитель групп разрядов:
_или,. - .precision: точность для чисел с плавающей точкой или максимальная длина для строк.
- type: тип представления:
b(двоичный),c(символ),d(десятичный),eилиE(экспоненциальный),fилиF(с фиксированной точкой),gилиG(общий),n(числовой с локализацией),o(восьмеричный),s(строковый),xилиX(шестнадцатеричный),%(процентный).
Короткие примеры использования
Форматирование целых чисел:
print(format(42, 'd'))42
print(format(42, '10d'))42
print(format(42, '<10d'))42
print(format(42, '010d'))0000000042
Форматирование чисел с плавающей точкой:
print(format(3.14159, '.2f'))3.14
print(format(3.14159, '10.2f'))3.14
print(format(3.14159, 'e'))3.141590e+00
Форматирование строк:
print(format('hello', '10'))hello
print(format('hello', '^10'))hello
print(format('hello', '*^10'))**hello***
Похожие функции в Python
В Python существует несколько способов форматирования строк, каждый со своими особенностями.
f-строки (доступны с Python 3.6): позволяют встраивать выражения напрямую в строковые литералы через префикс f. Они обладают высокой читаемостью и производительностью. Пример: f'Значение: {x:10.2f}'.
Метод str.format(): более гибкий подход, чем функция format(), поддерживает именованные и позиционные аргументы. Пример: '{:.2f}'.format(3.14159).
Оператор %: устаревший способ, основанный на синтаксисе языка C. Пример: '%10.2f' % 3.14159.
Функция format() полезна, когда нужно отформатировать отдельное значение без создания строки. В контексте строкового форматирования обычно предпочтительнее f-строки или метод str.format() для сложных шаблонов.
Аналоги в других языках программирования
JavaScript: метод toLocaleString() для чисел и Intl.NumberFormat для сложного форматирования. Пример: number.toLocaleString('ru-RU', { minimumFractionDigits: 2 }).
Java: класс String.format(), использующий спецификаторы в стиле C. Пример: String.format("%.2f", 3.14159).
C#: метод ToString() с параметрами или String.Format(). Пример: 3.14159.ToString("F2").
PHP: функция number_format() для чисел и sprintf() для общего форматирования. Пример: number_format(3.14159, 2).
SQL: функции форматирования зависят от СУБД, например, FORMAT() в MySQL. Пример: SELECT FORMAT(1234567.89, 2).
Lua: отсутствует встроенная функция форматирования, но используется string.format() из стандартной библиотеки, аналогичная функции C. Пример: string.format("%.2f", 3.14159).
Golang: пакет fmt с функцией Sprintf(). Пример: fmt.Sprintf("%.2f", 3.14159).
Kotlin: метод format() у строк или шаблоны строк. Пример: "%.2f".format(3.14159).
Типичные ошибки
Использование неверного спецификатора для типа данных:
print(format('text', 'd'))ValueError: Unknown format code 'd' for object of type 'str'
Несоответствие количества аргументов:
print(format(3.14159, '.2f', 'extra'))TypeError: format() takes at most 2 arguments (3 given)
Некорректная спецификация формата:
print(format(10, '5.2f'))ValueError: Precision not allowed in integer format specifier
Ошибка при работе с неформатируемыми объектами:
class CustomClass: pass
print(format(CustomClass(), '10'))TypeError: unsupported format string passed to CustomClass.__format__
Изменения в последних версиях Python
В Python 3.7 добавлена поддержка описателя __format__ для объектов dataclass через вызов dataclasses.is_dataclass().
В Python 3.8 представлен спецификатор = для f-строк, который выводит и выражение, и его значение, но это не затрагивает напрямую функцию format().
Начиная с Python 3.11, оптимизирована производительность функции format() для некоторых встроенных типов, например, целых чисел.
Расширенные примеры применения
Форматирование с разделителями групп разрядов:
print(format(1234567, ','))
print(format(1234567, '_'))1,234,567 1_234_567
Использование альтернативных форм:
print(format(42, '#b'))
print(format(42, '#x'))0b101010 0x2a
Форматирование знака:
print(format(10, '+'))
print(format(-10, '+'))
print(format(10, ' '))
print(format(-10, ' '))+10 -10 10 -10
Форматирование символов Unicode:
print(format(65, 'c'))A
Форматирование процентов:
print(format(0.85, '.1%'))85.0%
Использование объекта для форматирования:
class Money:
def __init__(self, amount):
self.amount = amount
def __format__(self, format_spec):
return format(self.amount, format_spec) + ' USD'
m = Money(1000)
print(format(m, ','))1,000 USD
Форматирование с динамической шириной:
width = 15
print(format('text', f'{width}'))text