Я роблю це в Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Що таке версія Python 3?
Я спробував шукати приклади в Інтернеті, але продовжував отримувати версії Python 2.
Я роблю це в Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Що таке версія Python 3?
Я спробував шукати приклади в Інтернеті, але продовжував отримувати версії Python 2.
Відповіді:
Ось документи про синтаксис "нового" формату. Прикладом може бути:
"({: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 набагато виразніше, ніж старіший, і його слід використовувати щоразу при написанні нового коду (якщо, звичайно, це не орієнтоване на старі середовища).
"({0.goals} goals, ${0.penalties})".format(self)
"conversion rate: {:.2%}".format(self.goals / self.shots):? Для мене добре працює як є ... (Python 3.4) Зауважте, що в ньому немає f, я прошу форматувати у відсотках, а не як число з плаваючою комою.
"{:.2f}%".format(float_num)працює чудово для обох.
$немає особливого значення, ні в синтаксисі старого формату, ні в новому, тому він повинен бути присутнім у створеному рядку без змін.
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, $2)'
Мені подобається такий підхід
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