Сколько вы знаете базовых "легальных" способов форматирования строк с помощью переменных в Python? Я насчитал 5!
1️⃣Оператор +
>>> greting = 'Hello'
>>> name = 'World'
>>> print(greting + ' ' + name)
'Hello World'
Самый не актуальный способ форматирования. С мелкими строками в количестве двух штук он работает быстрее всех. Но когда строки становятся длинной в сотни символов, этот метод просаживает производительность.
Делов том, что каждый оператор "+" выполняется отдельно для пар переменных, создавая новый объект строки, после которого следует следующий оператор, создающий еще один объект итд... В общем не рекомендуется, кроме случаев, где он явно выигрывает по скорости.
2️⃣Оператор %
>>> name = 'World'
>>> print('Hello %s' % name)
'Hello World'
Быстрый, но не удобный. Устарел.
3️⃣Метод str.format()
Есть много фишек применения этого метода. Для примера используем самый простой.
>>> name = 'World'
>>> print('Hello {}'.format(name))
'Hello World'
Наверное, самый функциональный метод с множеством возможностей. Рекомендован к использованию.
4️⃣f-string
>>> name = 'World'
>>> print(f'Hello {name}')
'Hello World'
Относительно новый и удобный по синтаксису метод. Работает быстрей чем format(). Поддерживает аналогичные фишки форматирования (но не все). Еще развивается и обновляется в новых версиях Python.
Рекомендован.
5️⃣ string.Template
templ = string.Template('Hello $name') print(templ.substitute(name='World'))
'Hello World'
Самый медленный, но самый безопасный способ собрать строку. Он в 10 раз медленней самого медленного способа. Но никаких инлайн-экспрешенов или фигурных скобочек.
__________
Есть еще ряд других модулей, такие как textwrap, jinja или собственные методы строки. Но данный пост о простых способах вставки переменных в строку.
#tricks