Форматирование строк в Python 3
"(%d goals, $%d)" % (self.goals, self.penalties)
^ Я знаю, как это сделать в Python 2
какова версия Python 3 этого?
Я пытался искать примеры в интернете, но я продолжал получать Python 2 версии
5 ответов:
здесь документы о синтаксисе" нового " формата. Примером может быть:
"({: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)
пояснив:
{}
означает только следующий позиционный аргумент, с форматом по умолчанию;{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 The newer гораздо более выразителен, чем старый, и должен использоваться при написании нового код (если он не нацелен на более старые среды, конечно).
Python 3.6 теперь поддерживает стенографическую литеральную строковую интерполяцию с PEP 498. Для вашего варианта использования новый синтаксис просто:
f"({self.goals} goals, ${self.penalties})"
Это похоже на предыдущие
.format
стандартный, но позволяет легко делать вещи как:>>> width = 10 >>> precision = 4 >>> value = decimal.Decimal('12.34567') >>> f'result: {value:{width}.{precision}}' 'result: 12.35'
эта строка работает как-есть в Python 3.
>>> sys.version '3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]' >>> "(%d goals, $%d)" % (self.goals, self.penalties) '(1 goals, )'
Он не был устаревшим; ваш код работает нормально. Читать дальше здесь.
мне нравится такой подход
my_hash = {} my_hash["goals"] = 3 #to show number my_hash["penalties"] = "5" #to show string print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)
обратите внимание на прилагаемые d и s в скобках соответственно.
результат должен выглядеть так:
I scored 3 goals and took 5 penalties