nie można powrócić dwie wartości, ale można zwrócić tuple
lub list
i rozpakować go po wywołaniu:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
Włączone linia return i, card
i, card
oznacza utworzenie krotki. Możesz również użyć nawiasów takich jak return (i, card)
, ale krotki są tworzone przecinkami, więc parens nie są obowiązkowe. Ale możesz użyć parens, aby uczynić twój kod czytelniejszym lub podzielić krotkę na wiele linii. To samo dotyczy linii my_i, my_card = select_choice()
.
Jeśli chcesz zwrócić więcej niż dwie wartości, rozważ użycie named tuple. Pozwoli to wywołującemu funkcję na dostęp do pól zwracanej wartości przez nazwę, która jest bardziej czytelna. Nadal można uzyskać dostęp do elementów krotki według indeksu. Na przykład w Schema.loads
metoda struktura Marshmallow zwraca UnmarshalResult
, który jest namedtuple
. Więc można 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żna zwrócić dict
z funkcji:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
ale warto rozważyć powrót instancję klasa użytkowa, która opakowuje 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)
Proszę podać przykład nazywając tę oczekiwaną funkcję i używając jego wartość (y) zwrotny, tak aby jasno dlaczego nie chcesz krotki. – bereal
Jaki jest sens pętli while? –
powinien mieć 'else: continue' przed zwrotnym oświadczeniem –