No puede devolver dos valores, pero puede devolver a tupleo a listy descomprimirlo después de la llamada:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
En línea return i, card i, cardsignifica crear una tupla. También puede usar paréntesis return (i, card), pero las tuplas se crean por comas, por lo que los parens no son obligatorios. Pero puede usar parens para hacer que su código sea más legible o para dividir la tupla en varias líneas. Lo mismo se aplica a la línea my_i, my_card = select_choice().
Si desea devolver más de dos valores, considere usar una tupla con nombre . Permitirá al llamante de la función acceder a los campos del valor devuelto por nombre, lo que es más legible. Aún puede acceder a los elementos de la tupla por índice. Por ejemplo, en el Schema.loadsmétodo Marshmallow framework devuelve un UnmarshalResultque es un namedtuple. Entonces puedes hacer:
data, errors = MySchema.loads(request.json())
if errors:
...
o
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
En otros casos, puede devolver un dictde su función:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Pero es posible que desee considerar devolver una instancia de una clase de utilidad, que envuelve sus datos:
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)