Me gustaría devolver dos valores de una función en dos variables separadas. Por ejemplo:
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
Y quiero poder usar estos valores por separado. Cuando traté de usar return i, card
, devuelve un tuple
y esto no es lo que quiero.
else: continue
antes de las declaraciones de devoluciónRespuestas:
No puede devolver dos valores, pero puede devolver a
tuple
o alist
y descomprimirlo después de la llamada:En línea
return i, card
i, card
significa crear una tupla. También puede usar paréntesisreturn (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íneamy_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.loads
método Marshmallow framework devuelve unUnmarshalResult
que es unnamedtuple
. Entonces puedes hacer:o
En otros casos, puede devolver un
dict
de su función:Pero es posible que desee considerar devolver una instancia de una clase de utilidad, que envuelve sus datos:
fuente
¿Cómo esperarías que se vea en el extremo de la llamada? 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 alguna parte, lo que está haciendo es darle un nombre al valor recibido en el contexto de la llamada. La función no pone el valor "en una variable" para usted, la asignación sí (no importa que la variable no sea "almacenamiento" para el valor, sino nuevamente, solo un nombre).
En realidad, es exactamente lo que quieres. Todo lo que tienes que hacer es
tuple
volver a desmontar.Así que solo toma los valores de
tuple
.La forma más fácil de hacerlo es desempacando:
fuente
Creo que lo que quieres es una tupla. Si lo usa
return (i, card)
, puede obtener estos dos resultados al:fuente
ahora puedes hacer todo lo que quieras con tu tupla.
fuente
fuente
Y esta es una alternativa. Si regresa como lista, entonces es simple obtener los valores.
fuente
puedes probar esto
fuente
Puede devolver más de un valor utilizando la lista también. Revise el código a continuación
fuente