Вы не можете вернуть два значения, но вы можете вернуть tuple
или list
и распаковать его после вызова:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
On line return i, card
i, card
означает создание кортежа. Вы также можете использовать круглые скобки, такие как return (i, card)
, но кортежи создаются через запятую, поэтому парены не обязательны. Но вы можете использовать парены, чтобы сделать ваш код более читабельным или разбить кортеж на несколько строк. То же относится и к строке my_i, my_card = select_choice()
.
Если вы хотите вернуть более двух значений, рассмотрите возможность использования с именем tuple . Это позволит вызывающей функции получить доступ к полям возвращаемого значения по имени, которое более читабельно. Вы по-прежнему можете получить доступ к элементам кортежа по индексу. Например, в методе Schema.loads
фреймворк Marshmallow возвращает UnmarshalResult
, то есть 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)