В 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
-стилевое форматирование существует с младенчества PythonsTemplate
Класс был введен в Python 2.4format
Метод был введен в Python 2.6f
-strings были введены в Python 3.6
Мои вопросы:
- Является
printf
устаревшим -стиль форматирование или будет устаревшим? - В том
Template class
, является лиsubstitute
метод устаревшим или будет устаревшим? (Я не говорю о томsafe_substitute
, что, как я понимаю, предлагает уникальные возможности)
Похожие вопросы и почему я думаю, что они не дубликаты:
Форматирование строки Python:% vs. формат - обрабатывает только методы 1 и 2 и спрашивает, какой из них лучше; мой вопрос явно об устаревании в свете дзен Python
Параметры форматирования строк: за и против - обрабатываются только методы 1a и 1b в вопросе, 1 и 2 в ответе, а также ничего об устаревании
расширенное форматирование строк по сравнению с шаблонными строками - в основном о методах 1 и 3, и не рассматривает устаревание
Выражения форматирования строк (Python) - в ответе упоминается, что исходный подход «%» планируется упразднить . Но в чем разница между запланированным прекращением поддержки , ожидающим прекращением поддержки и фактическим прекращением поддержки ? А
printf
метод -style не вызывает даже aPendingDeprecationWarning
, так что действительно ли он устарел? Этот пост тоже довольно старый, поэтому информация может быть устаревшей.
Formatter
урок?