Ich möchte zwei Werte aus einer Funktion in zwei separaten Variablen zurückgeben. Zum Beispiel:
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
Und ich möchte in der Lage sein, diese Werte getrennt zu verwenden. Als ich versuchte, return i, card
zu verwenden, wird ein Tupel
zurückgegeben und das ist nicht das, was ich will.
Sie können nicht zwei Werte zurückgeben, aber Sie können ein "Tupel" oder eine "Liste" zurückgeben und diese nach dem Aufruf auspacken:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
In der Zeile return i, card
bedeutet i, card
die Erstellung eines Tupels. Sie können auch Klammern wie return (i, card)
verwenden, aber Tupel werden durch Komma erzeugt, also sind Parens nicht zwingend erforderlich. Aber Sie können Parens verwenden, um Ihren Code lesbarer zu machen oder um das Tupel auf mehrere Zeilen aufzuteilen. Das gleiche gilt für die Zeile my_i, my_card = select_choice()
.
Wenn Sie mehr als zwei Werte zurückgeben wollen, sollten Sie ein benanntes Tupel verwenden. Damit kann der Aufrufer der Funktion auf Felder des zurückgegebenen Wertes über den Namen zugreifen, was besser lesbar ist. Auf die Elemente des Tupels können Sie weiterhin über den Index zugreifen. Zum Beispiel gibt die Methode Schema.loads
des Marshmallow-Frameworks ein UnmarshalResult
zurück, das ein namedtuple
ist. Sie können also tun:
data, errors = MySchema.loads(request.json())
if errors:
...
oder
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
In anderen Fällen können Sie ein Dict
aus Ihrer Funktion zurückgeben:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Sie sollten jedoch in Erwägung ziehen, eine Instanz einer Hilfsklasse zurückzugeben, die Ihre Daten umhüllt:
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)
Ich denke, was Sie wollen, ist ein Tupel. Wenn Sie return (i, card)
verwenden, können Sie diese beiden Ergebnisse durch erhalten:
i, card = select_choice()