Nie możesz zwrócić dwóch wartości, ale możesz zwrócić a tuple
lub a list
i 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, card
oznacza 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.loads
metodzie platforma Marshmallow zwraca a, UnmarshalResult
któ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 dict
ze 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)