В Python есть как минимум шесть способов форматирования строки:
In [1]: world = "Earth"
# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'
# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'
# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'
# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'
# method 2c
In [6]: f"Hello, {world}"
Out[6]: 'Hello, Earth'
In [7]: from string import Template
# method 3
In [8]: Template("Hello, $planet").substitute(planet=world)
Out[8]: 'Hello, Earth'
Краткая история различных методов:
- форматирование
printf
-style существует с детства Pythons - Класс
Template
был представлен в Python 2.4 - Метод
format
был представлен в Python 2.6 -
f
-strings были введены в Python 3.6
Мои вопросы:
- Является ли форматирование
printf
-style устаревшим или будет устаревшим? - В
Template class
методsubstitute
или будет объявлен устаревшим? (Я не говорю оsafe_substitute
, который, насколько я понимаю, предлагает уникальные возможности)
Подобные вопросы и почему я думаю, что они не дубликаты:
-
Форматирование строки Python:% vs..format - обрабатывает только методы 1 и 2 и спрашивает, какой из них лучше; мой вопрос явно об устаревании в свете дзен Python
-
Параметры форматирования строки: плюсы и минусы - относятся только к методам 1a и 1b в вопросе, 1 и 2 в ответе, а также к устареванию
-
расширенное форматирование строк по сравнению со строками шаблонов - в основном о методах 1 и 3 и не решает проблему устаревания
-
Выражения форматирования строки (Python) - в ответе упоминается, что первоначальный подход "%" не рекомендуется использовать. Но какая разница между запланированной амортизацией, ожиданием амортизации и фактической амортизацией? И метод
printf
-style не вызывает дажеPendingDeprecationWarning
, так что это действительно будет устаревшим? Этот пост также довольно старый, поэтому информация может быть устаревшей.