Метод строк 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