Chciałbym zwrócić dwie wartości z funkcji w dwóch osobnych zmiennych. Na przykład:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
elif row == 2:
i = 1
card = list_b[-1]
elif row == 3:
i = 0
card = list_c[-1]
return i
return card
I chcę móc używać tych wartości osobno. Kiedy próbowałem użyć return i, card
, zwraca a, tuple
a nie tego chcę.
else: continue
wyciąg przed zwrotemOdpowiedzi:
Nie możesz zwrócić dwóch wartości, ale możesz zwrócić a
tuple
lub alist
i rozpakować je po wywołaniu:On line
return i, card
i, card
oznacza utworzenie krotki. Możesz także użyć nawiasureturn (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 liniimy_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 anamedtuple
. Możesz więc zrobić:lub
W innych przypadkach możesz zwrócić a
dict
ze swojej funkcji:Ale możesz rozważyć zwrócenie instancji klasy narzędzia, która otacza twoje dane:
źródło
Jak byś się spodziewał, że będzie wyglądał na końcu połączenia? Nie możesz pisać,
a = select_choice(); b = select_choice()
ponieważ wywołałoby to funkcję dwukrotnie.Wartości nie są zwracane „w zmiennych”; nie tak działa Python. Funkcja zwraca wartości (obiekty). Zmienna to tylko nazwa wartości w danym kontekście. Kiedy wywołujesz funkcję i przypisujesz gdzieś wartość zwracaną, to nadając otrzymanej wartości nazwę w kontekście wywołującym. Funkcja nie umieszcza dla ciebie wartości „w zmiennej”, przypisanie tak robi (nieważne, że zmienna nie jest „pamięcią” dla wartości, ale tylko nazwą).
Właściwie to jest dokładnie to, czego chcesz. Wszystko, co musisz zrobić, to
tuple
ponownie rozebrać.Więc po prostu pobierz wartości z
tuple
.Najłatwiej to zrobić poprzez rozpakowanie:
źródło
Myślę, że to, czego chcesz, to krotka. Jeśli używasz
return (i, card)
, możesz uzyskać te dwa wyniki:źródło
teraz możesz robić wszystko, co chcesz za pomocą krotki.
źródło
źródło
Jest to alternatywa: jeśli wracasz jako lista, łatwo jest uzyskać wartości.
źródło
możesz tego spróbować
źródło
Możesz także zwrócić więcej niż jedną wartość za pomocą listy. Sprawdź kod poniżej
źródło