Nuestros mejores desarrolladores han agotado sus provisiones de café, en su búsqueda todo el tiempo por la resolución, hasta que Rubén encontró la contestación en Gitea así que hoy la compartimos con nosotros.
Solución:
No puede devolver dos valores, pero puede devolver un tuple
o un 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 puedes usar paréntesis como return (i, card)
, pero las tuplas se crean con comas, por lo que los paréntesis no son obligatorios. Pero puede usar paréntesis 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á a la persona que llama a la función acceder 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 Schema.loads
El método Marshmallow framework devuelve un UnmarshalResult
el cual 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 dict
de 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)
Me gustaría devolver dos valores de una función en dos variables separadas.
¿Cómo esperarías que se viera en el extremo que llama? no puedes escribir a = select_choice(); b = select_choice()
porque eso llamaría a la función dos veces.
Los valores no se devuelven “en variables”; así no es como funciona Python. Una función devuelve valores (objetos). Una variable es solo un nombre para un valor en un contexto dado. Cuando llama a una función y asigna el valor de retorno en algún lugar, lo que está haciendo es darle un nombre al valor recibido en el contexto de la llamada. La función no coloca el valor “en una variable” para usted, la asignación sí lo hace (no importa que la variable no sea “almacenamiento” para el valor, sino solo un nombre).
Cuando traté de usar
return i, card
devuelve untuple
y esto no es lo que quiero.
En realidad, es exactamente lo que quieres. Todo lo que tienes que hacer es tomar el tuple
aparte de nuevo.
Y quiero poder usar estos valores por separado.
Así que solo tome los valores de la tuple
.
La forma más fácil de hacer esto es desempacando:
a, b = select_choice()
Yo creo que lo que quieres es una tupla. Si utiliza return (i, card)
puede obtener estos dos resultados al:
i, card = select_choice()
valoraciones y comentarios
Si sostienes algún reparo o capacidad de ascender nuestro división puedes añadir una crítica y con gusto lo leeremos.