Возврат кортежа аргументов для подачи в string.format () - PullRequest
33 голосов
/ 12 февраля 2009

В настоящее время я пытаюсь получить метод в Python, который возвращает список с нулевой, одной или двумя строками для подключения к формататору строк, а затем передает их методу строк. Мой код выглядит примерно так:

class PairEvaluator(HandEvaluator):
  def returnArbitrary(self):
    return ('ace', 'king')

pe = PairEvaluator()
cards = pe.returnArbitrary()
print('Two pair, {0}s and {1}s'.format(cards))

Когда я пытаюсь запустить этот код, компилятор выдает IndexError: tuple index вне диапазона.
Как мне структурировать возвращаемое значение, чтобы оно передавалось в качестве аргумента .format()?

Ответы [ 3 ]

75 голосов
/ 12 февраля 2009
print('Two pair, {0}s and {1}s'.format(*cards))

Вам не хватает только звезды: D

4 голосов
/ 27 ноября 2012

Формат предпочтительнее оператора% с момента его появления в Python 2.6: http://docs.python.org/2/library/stdtypes.html#str.format

Также намного проще просто распаковать кортеж с помощью * - или диктовку с ** - вместо того, чтобы изменять строку формата.

1 голос
/ 12 февраля 2009

Это попытка использовать «карточки» в качестве одного формата ввода для печати, а не содержимое карточек.

Попробуйте что-то вроде:

print('Two pair, %ss and %ss' % cards)
...