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

by @snakeblog
Форматирование строк в Python

Очень часто, вывод программы представляет из себя некую строку, в которой содержатся данные из вашей программы. Здесь мы рассмотрим способы форматирования строк, то есть подстановки ваших переменных в строки в языке программирования Python.

C-форматирование

Наверное все, кто программировал на языке C или C++ знают о такой функции, как printf, которая выводит строку, подставляя туда переменные в нужном формате. Чтобы понять о чём я говорю, рассмотрим примеры:

printf("Целое число %d", 5);
printf("Дробное число %f", 2.1);
printf("Строка %s", "какая-то строка");

Для каждого типа данных есть собственная последовательность + есть всякие модификаторы. Побольше о них можно узнать например здесь. Для того, чтобы таким образом отформатировать строку, используется следующий синтаксис:

<строка с параметрами>%(<переменные для подстановки>)

Например:

print("%d %f %s"%(1, 2.5, "string")) # Вывод: 1 2.500000 string

Можно записать строку в переменную и потом подставить параметры:

pattern = "%d %f %s"
print(pattern%(2, 3.3, "abc"))  # Вывод: 2 3.300000 abc

Этот способ хорош тем, что можно очень гибко настраивать параметры вывода при помощи модификаторов. Например вот так можно вывести число с точностью 3 знака после запятой:

print("%.3f"%(2.12345))  

Метод format

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

Пример:

pattern = "{}:{}:{}"
print(pattern.format(1, 2, 3))  # 1 2 3
another_pattern = "{2}:{1}:{0}"
print(another_pattern.format(1, 2, 3))  # 3 2 1

Этот способ хорош тем, что ему не важен тип аргумента, лишь их порядок.


f-строки

С версии 3.6 существует ещё один способ форматирования. Он очень удобен, однако не без недостатков: подставляет аргументы в строку сразу при объявлении. Рассмотрим пример:

a = 3
b = 2
print(f"{a*b} {a+b} {3*3}")  # 6 5 9

Перед строкой ставится префикс f, который обозначает f-строку.Внутри могут быть любые выражения в фигурных скобках: они вычисляются сразу же.

Какой из этих способов использовать зависит от вас и от ситуации. В любом случае, один из них точно подойдёт. А эта статья подошла к концу, до встреч в группе SnakeBlog.

July 19, 2018
by @flygrounder