Форматирование строки Python: ссылка на один аргумент несколько раз - PullRequest
38 голосов
/ 17 января 2011

Если у меня есть строка типа:

"{0} {1} {1}" % ("foo", "bar")

и я хочу:

"foo bar bar"

Какими должны быть токены для замены?(Я знаю, что мой пример выше неверен; я просто пытаюсь выразить свою цель.)

Ответы [ 3 ]

51 голосов
/ 17 января 2011
"{0} {1} {1}".format("foo", "bar")
15 голосов
/ 17 января 2011
"%(foo)s %(foo)s %(bar)s" % { "foo" : "foo", "bar":"bar"}

- еще один верный, но длинный ответ. Просто чтобы показать вам другую точку зрения на проблему;)

7 голосов
/ 17 января 2011

Python 3 имеет именно такой синтаксис, за исключением того, что оператор % теперь является методом format. str.format также был добавлен в Python 2.6+, чтобы сгладить переход к Python 3. Подробнее см. синтаксис строки формата .

>>> '{0} {1} {1}' % ('foo', 'bar')
'foo bar bar'

Это не может быть сделано с кортежем в старых версиях Python. Вы можете приблизиться, используя ключи сопоставления, заключенные в скобки. С ключами сопоставления значения формата должны передаваться как dict, а не как кортеж.

>>> '%(0)s %(1)s %(1)s' % {'0': 'foo', '1': 'bar'}
'foo bar bar'

Из Руководства по Python :

Если правильным аргументом является словарь (или другой тип отображения), то форматы в строке должны включать заключенный в скобки ключ отображения в этот словарь, вставленный сразу после символа «%». Клавиша сопоставления выбирает значение для форматирования из сопоставления.

...