Возвращает кортеж аргументов для передачи в string.format()

В настоящее время я пытаюсь получить метод в 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: индекс кортежа вне допустимого диапазона.
Как мне структурировать возвращаемое значение, чтобы передать его в качестве аргумента функции .format()?


person Yes - that Jake.    schedule 11.02.2009    source источник


Ответы (3)


print('Two pair, {0}s and {1}s'.format(*cards))

Тебе не хватает только звезды :D

person Bartosz Radaczyński    schedule 11.02.2009
comment
Это потрясающе. Каково определение оператора * в этом контексте? - person Yes - that Jake.; 12.02.2009
comment
Он распаковывает кортеж, например, из (a, b, c) в a, b, c. - person Nikhil Chelliah; 12.02.2009
comment
Большое спасибо! Это более простой способ и очень помог. - person Hsinhsin Hung; 18.12.2019

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

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

person trojjer    schedule 27.11.2012

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

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

print('Two pair, %ss and %ss' % cards)
person Andrew Grant    schedule 11.02.2009