Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). В этом случае для подстановки этих значений можно использовать строковый метод format. При этом в шаблоне в места подстановок нужно поставить якори вида {}, а в параметры format передать ровно необходимое количество значений. Однако возможностей у format гораздо больше: кроме непосредственной подстановки в строку возможно применение форматирования в выводимым данным. Полный список возможностей можно получить непосредственно в документации, а здесь будет список разумных примеров использования этого метода:

>>> '{}, {}, {}'.format('a', 'b', 'c'
'a, b, c'
>>> '{0}, {1}, {2}'.format('a', 'b', 'c'# Можно явно указать индексы
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c'# Если индексы указаны явно, то они могут идти в любом порядке
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad'# И даже повторяться
'abracadabra'
>>> 'Coordinates: {lat}, {lon}'.format(lat='37.24N', lon='-115.81W'# Можно вместо индексов явно указывать имена
'Coordinates: 37.24N, -115.81W'
 
# Выравнивания
>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered'# Используем * для заполнения
'***********centered***********'
 
# Особый вывод действительных чисел
>>> '{:+f}; {:+f}'.format(3.14, -3.14# Всегда показывать знак
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14# Или выводить пробел, если знака плюса нет
' 3.140000; -3.140000'
>>> '{:0.2f}; {:0.3f}; {:8.3f}'.format(3.14, -3.14, 179e-4# Можно выводить фиксированное кол-во значащих цифр
'3.14; -3.140;    0.018'
 
# Вывод в двоичной, восьмеричной или шестнадцатиричной системе счисления
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)  # С префиксом 0x, 0o, 0b
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

f-строки

Начиная с Python 3.6 появился ещё один способ получения строк, в которые вставлены значения некоторых переменных. Кроме того, что этот способ очень хорошо читается, он ещё и самый быстрый. Начнём с примера:

>>> x = 10
>>> y = 5
>>> print(f"{x} x {y} / 2 = {x * y / 2}")
>>> 10 x 5 / 2 = 25.0
 
>>> planets = ["Меркурий", "Венера", "Земля", "Марс"]
>>> print(f"Мы живём не планете {planets[2]}")
>>> Мы живём не планете Земля
В целом этот подход очень похож на использование метода .format, только необходимо всегда указывать префикс f перед строкой и имена переменных внутри фигурных скобок. Возможностей того, что можно указывать внутри фигурных скобок достаточно много: pep-0498.
Последнее изменение: Суббота, 15 Август 2020, 02:35