Ответ 1
Вот документы о синтаксисе "нового" формата. Примером может служить:
"({:d} goals, ${:d})".format(self.goals, self.penalties)
Если оба goals
и penalties
являются целыми числами (т.е. их формат по умолчанию одобрен), его можно сократить до:
"({} goals, ${})".format(self.goals, self.penalties)
И поскольку параметры являются полями self
, есть способ сделать это, используя один аргумент дважды (как заметил в комментариях @Burhan Khalid):
"({0.goals} goals, ${0.penalties})".format(self)
Разъяснение:
-
{}
означает только следующий аргумент positional со стандартным форматом; -
{0}
означает аргумент с индексом0
со стандартным форматом; -
{:d}
- следующий позиционный аргумент с десятичным целочисленным форматом; -
{0:d}
- это аргумент с индексом0
с десятичным целочисленным форматом.
Есть много других вещей, которые вы можете сделать при выборе аргумента (используя именованные аргументы вместо позиционных, доступ к полям и т.д.) и многие параметры формата (заполнение номера, использование разделителей тысяч, отображение знака или нет).). Некоторые другие примеры:
"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)
"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)
"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'
"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'
"games: {:>3}".format(player1.games) # 'games: 123'
"games: {:>3}".format(player2.games) # 'games: 4'
"games: {:0>3}".format(player2.games) # 'games: 004'
Примечание.. Как отмечали другие, новый формат не заменяет первый, оба доступны как в Python 3, так и в более новых версиях Python 2. Некоторые могут сказать, что это вопрос предпочтения, но IMHO - более выразительный, чем более старый, и его следует использовать при написании нового кода (конечно, если он не нацелен на более старые среды).