В Python есть 3 способа форматировать строки, и один из них лучше других. Но не будем забегать наперед — о каком именно форматировании вообще речь? Каждый раз когда мы хотим поприветствовать пользователя по имени нам нужно вставить строку с именем в строку-шаблон. Большинство полезных записей в логах так же содержат значения переменных. И вот пример:
integer = 42
string = 'FORTY_TWO'
print('string number %s, or simply %d' % (string, integer))
print('string number {}, or simply {}'.format(string, integer))
print(f'string number {string}, or simply {integer}')
Первый способ, форматирование оператором %, пришел в Python еще из С — он имитирует функцию printf. Этот способ был первым в питоне, и остается единственным (из обсуждаемых в статье) в Python версии 2.5 и ниже.
Второй способ — это метод str.format, принадлежащий встроенному классу строк. Он появился с Python 3.0, и был портирован в версию 2.6. Этот метод был рекомендован как обладающий более богатым синтаксисом.
Третий способ, f-string, появился в Python версии 3.6. Как объяснено в PEP-0498, создание нового способа форматирования строк было мотивировано недостатками существующих методов, которые авторы характеризуют как подверженные ошибкам, недостаточно гибкие и не элегантные:
This PEP is driven by the desire to have a simpler way to format strings in Python. The existing ways of formatting are either error prone, inflexible, or cumbersome.
Итак, у нас есть три способа решить одну задачу. Но может это дело личного вкуса и предпочтений? Возможно, но стиль вашего кода (особенно кода в проекте с большим количеством участников) точно выиграет от единообразия. В лучшем случае стоит использовать один метод форматирования строк, тогда читать код станет проще. Но какой же метод выбрать? И есть ли разница в производительности кода?
Читать полностью »