Вы не можете вернуть два значения, но вы можете вернуть a tuple
или a list
и распаковать его после вызова:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
На линии return i, card
i, card
означает создание кортежа. Вы также можете использовать круглые скобки return (i, card)
, но кортежи создаются через запятую, поэтому парены не обязательны. Но вы можете использовать парены, чтобы сделать ваш код более читабельным или разбить кортеж на несколько строк. То же самое относится и к линии my_i, my_card = select_choice()
.
Если вы хотите вернуть более двух значений, рассмотрите возможность использования именованного кортежа . Это позволит вызывающей функции получить доступ к полям возвращаемого значения по имени, которое более читабельно. Вы по-прежнему можете получить доступ к элементам кортежа по индексу. Например, в Schema.loads
методе Marshmallow Framework возвращает a, UnmarshalResult
который является a namedtuple
. Так что вы можете сделать:
data, errors = MySchema.loads(request.json())
if errors:
...
или
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
В других случаях вы можете вернуть dict
из вашей функции:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Но вы можете рассмотреть возможность возврата экземпляра служебного класса, который упаковывает ваши данные:
class ChoiceData():
def __init__(self, i, card, other_field, ...):
# you can put here some validation logic
self.i = i
self.card = card
self.other_field = other_field
...
def select_choice():
...
return ChoiceData(i, card, other_field, ...)
choice_data = select_choice()
print(choice_data.i, choice_data.card)