Метод строк format в Python: форматирование строк.

Возвращает отформатированную копию строки.

format(args, *kwargs)

  • args — позиционные аргументы;
  • kwargs — именованные аргументы.

Строка, для которой вызывается данный метод, может содержать маркеры в фигурных скобках {}, которые следует заменить. Обычный текст, вне скобок будет выведен как есть без изменений.

Метод возвращает копию строки, в которой маркеры заменены текстовыми значениями из переданных аргументов. Маркер — это имя аргумента либо его индекс. Если используются числа, и они составляют последовательность (0, 1, 2, ...), то они могут быть опущены разом (но не выборочно). Например, {}-{}-{} и {0}-{1}-{2} эквивалентны.

'{}-{}-{}'.format(1, 2, 3)  # Результат: '1-2-3'
'{}-{}-{}'.format(*[1, 2, 3])  # Результат: '1-2-3'
'{one}-{two}-{three}'.format(two=2, one=1, three=3)  # Результат: '1-2-3'
'{one}-{two}-{three}'.format(**{'two': 2, 'one': 1, 'three': 3})  # Результат: '1-2-3'

После наименования может следовать любое количество выражений доступа к атрибуту или адресации по индексу. Атрибут объекта адресуется при помощи точки ., доступ к элементу при помощи квадратных скобок [].

import datetime
obj = {'one': {'sub': 1}, 'two': [10, 2, 30], 'three': datetime.datetime.now()}
'{one[sub]}-{two[1]}-{three.year}'.format(**obj)

Приведение используется для приведения типов перед форматированием.

Обычно возврат отформатированного значения возлагается на метод __format__(), однако бывают случаи, что требуется произвести принудительное приведение, например, к строке, в обход имеющейся реализации. Логика форматирования по умолчанию обходится при помощи приведения значения к строке перед вызовом __format__().

Поддерживаются три флага приведения: * !s Вызывает str() * !r Вызывает repr() * !a Вызывает ascii().

import datetime 
demo = datetime.date.today()
result = '{!s}, {!r}, {!a}, {}'.format(demo, demo ,demo, demo)
print(result)

Формат содержит определение того как должно быть представлено значение, включая информацию о длине, выравнивании, дополнении строки, точности для чисел и тому подобное.

Можно задавать ширину поля и выравнивание

right = 'Начало{0:20}Конец'.format(7)
left = 'Начало{0:<20}Конец'.format(8)
center = 'Начало{0:^20}Конец'.format(9)

print(right)
print(left)
print(center)

Результат

Начало                   7Конец
Начало8                   Конец
Начало                   9Конец

Вывод вещественных чисел

print('{0}'.format(4/3))
print('{0:f}'.format(4/3))
print('{0:.2f}'.format(4/3))
print('{0:10.3f}'.format(4/3))

Результат

1.3333333333333333
1.333333
1.33
     1.333