Часто вам требуется больший контроль над форматированием вывода, чем просто печать значений, разделенных пробелами. Есть несколько способов форматирования вывода:
str.format()
.'%'
в стиле языка C
.Форматированные строковые литералы, также называемые "f-строками" для краткости, позволяют включать значение выражений Python в строку, добавляя префикс к строке 'f'
или 'F'
и записывая выражения внутри строки как {expression}
.
>>> year = 2016 >>> event = 'Referendum' >>> f'Results of the {year} {event}' # 'Results of the 2016 Referendum'
Необязательный спецификатор формата Mini-Language может следовать за выражением. Это позволяет лучше контролировать форматирование значения. Следующий пример округляет число до десяти после десятичного числа:
>>> import math >>> print(f'The value of pi is approximately {math.pi:.3f}.') # The value of pi is approximately 3.142.
Передача целого числа после ':'
символа приведет к минимальному количеству символов в этом поле. Это полезно для выравнивания столбцов.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678} >>> for name, phone in table.items(): ... print(f'{name:10} ==> {phone:10d}') ... # Sjoerd ==> 4127 # Jack ==> 4098 # Dcab ==> 7678
Другие модификаторы могут использоваться для преобразования значения перед его форматированием. '!a'
применяется ascii()
, '!s'
применяется str()
и '!r'
применяется repr()
:
>>> animals = 'eels' >>> print(f'My hovercraft is full of {animals}.') # My hovercraft is full of eels. >>> print(f'My hovercraft is full of {animals!r}.') # My hovercraft is full of 'eels'.
Поддержка f-строками спецификации формата Mini-Language.
>>> b = 2999 >>> pi = 3.1415926 >>> f'Pi={pi:.3f}, b={b:*^11.2f}' # 'Pi=3.142, b=**2999.00**' >>> print("\n".join(f'{a:{a}<{a}}' for a in range(1, 6))) # 1 # 22 # 333 # 4444 # 55555
str.format()
.Основное использование str.format()
метода выглядит следующим образом:
>>> print('We are the {} who say "{}!"'.format('knights', 'Ni')) # We are the knights who say "Ni!" >>> yes_votes = 42_572_654 >>> no_votes = 43_132_495 >>> percentage = yes_votes / (yes_votes + no_votes) >>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage) # ' 42572654 YES votes 49.67%'
Скобки и символы внутри них, называемые полями формата, заменяются объектами, переданными в метод str.format()
. Число в скобках может использоваться для обозначения позиции объекта.
>>> print('{0} and {1}'.format('spam', 'eggs')) # spam and eggs >>> print('{1} and {0}'.format('spam', 'eggs')) # eggs and spam
Если в методе str.format()
используются ключевые аргументы, на их значения ссылается имя аргумента.
>>> print('This {food} is {adjective}.'.format( ... food='spam', adjective='absolutely horrible')) # This spam is absolutely horrible.
Позиционные и ключевые аргументы могут быть произвольно объединены:
>>> print('The story of {0}, {1}, and {other}.'.format( ... 'Bill', 'Manfred', other='Georg')) # The story of Bill, Manfred, and Georg.
Если строка формата очень длинная, которую не хотите разделять, было бы неплохо, если бы вы могли ссылаться на переменные, которые должны быть отформатированы по имени, а не по позиции. Это можно сделать, передавая словарь dict
и используя квадратные скобки '[]'
для доступа к ключам.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ' ... 'Dcab: {0[Dcab]:d}'.format(table)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Это также можно сделать, передав переменную словаря table
в качестве аргументов ключевого слова с обозначением **
- знака распаковки словаря.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Это особенно полезно в сочетании со встроенной функцией vars()
, которая возвращает словарь, содержащий все локальные переменные.
Как пример, следующий код производит аккуратно выровненный набор столбцов, дающих целые числа и их квадраты и кубы:
>>> for x in range(1, 11): ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) ... # 1 1 1 # 2 4 8 # 3 9 27 # 4 16 64 # 5 25 125 # 6 36 216 # 7 49 343 # 8 64 512 # 9 81 729 # 10 100 1000
'%'
в стиле языка C
.Оператор '%'
также может использоваться для форматирования строк. Он интерпретирует левый аргумент так же, как строку формата sprintf()
языка C
, применяемую к правому аргументу и возвращает строку, полученную в результате этой операции форматирования. Например:
>>> import math >>> print('The value of pi is approximately %5.3f.' % math.pi) # The value of pi is approximately 3.142.
Дополнительную информацию по данному способу форматирования можно найти в разделе "Форматирование строк в стиле printf
".