Форматирование вывода в Python: замена нескольких% s одной и той же переменной - PullRequest
16 голосов
/ 08 августа 2011

Я пытаюсь сохранить / обновить / переписать / исправить немного Python, который выглядит примерно так:

variable = """My name is %s and it has been %s since I was born.
              My parents decided to call me %s because they thought %s was a nice name.
              %s is the same as %s.""" % (name, name, name, name, name, name)

Во всем сценарии есть небольшие фрагменты, которые выглядят так, и мне было интересно, есть ли более простой (более Pythonic?) Способ написания этого кода. Я нашел один экземпляр этого, который заменяет одну и ту же переменную около 30 раз, и это просто ужасно.

Является ли единственный способ избежать (на мой взгляд) безобразия разделить его на множество маленьких кусочков?

variable = """My name is %s and it has been %s since I was born.""" % (name, name)
variable += """My parents decided to call me %s because they thought %s was a nice name.""" % (name, name)
variable += """%s is the same as %s.""" % (name, name)

Ответы [ 8 ]

56 голосов
/ 08 августа 2011

Вместо этого используйте словарь.

var = '%(foo)s %(foo)s %(foo)s' % { 'foo': 'look_at_me_three_times' }

или format с явной нумерацией.

var = '{0} {0} {0}'.format('look_at_meeee')

Ну или format с именованными параметрами.

var = '{foo} {foo} {foo}'.format(foo = 'python you so crazy')
6 голосов
/ 08 августа 2011

Использовать строки форматирования:

>>> variable = """My name is {name} and it has been {name} since..."""
>>> n = "alex"
>>>
>>> variable.format(name=n)
'My name is alex and it has been alex since...'

Текст в {} может быть дескриптором или значением индекса.

Еще один интересный прием - использовать словарь для определения нескольких переменных вкомбинация с оператором **.

>>> values = {"name": "alex", "color": "red"}
>>> """My name is {name} and my favorite color is {color}""".format(**values)
'My name is alex and my favorite color is red'
>>>
5 голосов
/ 08 августа 2011
>>> "%(name)s %(name)s hello!" % dict(name='foo')
'foo foo hello!'
5 голосов
/ 08 августа 2011

Используйте новые string.format:

name = 'Alex'
variable = """My name is {0} and it has been {0} since I was born.
          My parents decided to call me {0} because they thought {0} was a nice name.
          {0} is the same as {0}.""".format(name)
3 голосов
/ 08 августа 2011

Вы можете использовать именованные параметры. Смотрите примеры здесь

2 голосов
/ 08 августа 2011
variable = """My name is {0} and it has been {0} since I was born.
              My parents decided to call me {0} because they thought {0} was a nice name.
              {0} is the same as {0}.""".format(name)
1 голос
/ 08 августа 2011

взгляните на Шаблон строки

0 голосов
/ 22 июня 2019

В Python 3.6 появился более простой способ форматирования строк. Вы можете получить подробную информацию об этом в PEP 498

>>> name = "Sam"
>>> age = 30
>>> f"Hello, {name}. You are {age}."
'Hello, Sam. You are 30.'

Также поддерживается оценка времени выполнения

>>>f"{2 * 30}"
'60'

Также поддерживается словарная операция

>>> comedian = {'name': 'Tom', 'age': 30}
>>> f"The comedian is {comedian['name']}, aged {comedian['age']}."
 The comedian is Tom, aged 30.
...