Подстановка в строки

Методы подстановки в Python

  • В стиле printf: "Привет %s!" % ("мир",)
  • В стиле format: "Привет {}!".format("мир")
  • В стиле f-строк: m = "мир"; f"Привет {m}!"

Формирование строк в стиле printf

У типа str предусмотрен оператор % который принимает вторым аргументом кортеж и подставляет его элементы на указанные в шаблоне места.

t = "%s = %.2f"
s = t % ("A", 42)
# s == 'A = 42.00'

Популярные форматы

Формат Ожидаемый тип Эффект Варианты с модификаторами
%s str Подстановка строки
%d int Подстановка целого числа %06d, %#4d, %+02d
%x int Подстановка числа в шестнадцатеричной системе %04x, %#x, %+06x
%f float Подстановка числа с плавающей точкой %0.4f, %8.4f, %+8.2f, %+08.2f
%e float Экспоненциальный формат %1.6e

Примеры с использованием модификаторов

"%6d" % 42 # '    42'
"%06d" % 42 # '000042'
"%.2f" % 3.14159   # '3.14'
"%06.2f" % 3.14159 # '003.14'
"%#6.2f" % 3.14159 # '  3.14'
"%+6.3f" % 3.14159 # '+3.142'
"%+1.4e" % 3.14159 # '+3.1416e+00'

Формирование строк в стиле format

У типа str есть специальный метод format:

s = 'Привет, {}!'
w = s.format('мир')
#w == 'Привет, мир!'

Преимущества:

  • Автоматическое приведение типов
  • Возможность передачи параметров по имени и по номеру (в том числе повторение)

Форматы аналогичны % но указываются после символа : перед которым может стоять имя аргумента:

s = 'Power {power:.2f} State {state}'
w = s.format(state = "Ready", power = 3.14159)
#w == 'Power 3.14 State Ready'

Формирование строк в стиле f-строк

Строки могут быть созданы со специальным модификатором f который позволяет напрямую вставлять переменные в строку:

q = 'мир'
s = f'Привет, {q}!'
#s == 'Привет, мир!'

Преимущества:

  • Автоматическое приведение типов
  • Отсутствие дублирования имен переменных в шаблоне и в программе

Форматы аналогичны % но указываются после символа :, как и в подстановках через format.

power = 3.14159
state = "Ready"
w = f'Power {power:.2f} State {state}'
#w == 'Power 3.14 State Ready'

Модификатор f можно сочетать с модификатором r, чтобы не обрабатывать спецсимволы.

filename = 'test'
fullpath = fr'c:\test\{filename}.txt'