Nie możesz zwrócić dwóch wartości, ale możesz zwrócić a tuplelub a listi rozpakować je po wywołaniu:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
On line return i, card i, cardoznacza utworzenie krotki. Możesz także użyć nawiasu return (i, card), ale krotki są tworzone przecinkiem, więc pareny nie są obowiązkowe. Możesz jednak użyć parens, aby uczynić kod bardziej czytelnym lub podzielić krotkę na wiele wierszy. To samo dotyczy linii my_i, my_card = select_choice().
Jeśli chcesz zwrócić więcej niż dwie wartości, rozważ użycie nazwanej krotki . Umożliwi to wywołującemu funkcję dostęp do pól zwracanej wartości według nazwy, co jest bardziej czytelne. Nadal możesz uzyskać dostęp do elementów krotki według indeksu. Na przykład w Schema.loadsmetodzie platforma Marshmallow zwraca a, UnmarshalResultktóre jest a namedtuple. Możesz więc zrobić:
data, errors = MySchema.loads(request.json())
if errors:
...
lub
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
W innych przypadkach możesz zwrócić a dictze swojej funkcji:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Ale możesz rozważyć zwrócenie instancji klasy narzędzia, która otacza twoje dane:
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)