No se puede devolver dos valores, pero se puede devolver un tuple
o una list
y 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, card
significa crear una tupla. También puede usar paréntesis como return (i, card)
, pero las tuplas se crean mediante una coma, 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 múltiples 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 un named tuple. Permitirá que la persona que llama de la función acceda a los campos del valor devuelto por nombre, que es más legible. Todavía puede acceder a los elementos de la tupla por índice. Por ejemplo, en el método Schema.loads
Marshmallow framework devuelve un UnmarshalResult
que es un namedtuple
. Por lo que puede 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, es posible devolver un dict
de su función:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Pero es posible que desee considerar la posibilidad de devolver una instancia de una clase de utilidad, que ajusta 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)
Sírvanse proporcionar un ejemplo de llamar a esta función esperada y el uso de su valor (s) de retorno, por lo que deja claro por qué no desea tuplas. – bereal
¿Cuál es el punto del ciclo while? –
debería tener un 'else: continue' antes de las declaraciones de devolución –