valores valor una retornar que propias otra lista funciones funcion ejemplos devuelven dentro como python list function return return-value

una - retornar dos valores en python



¿Cómo puedo devolver dos valores de una función en Python? (7)

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 una tuple y esto no es lo que quiero.


Me gustaría devolver dos valores de una función en dos variables separadas.

¿Qué esperarías que se vea en el extremo de la llamada? No puede escribir a = select_choice(); b = select_choice() 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 hace 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 tarea lo hace (no importa que la variable no sea "almacenamiento" para el valor, sino que nuevamente, solo un nombre).

Cuando traté de usar return i, card , devuelve una tuple y esto no es lo que quiero.

En realidad, es exactamente lo que quieres. Todo lo que tienes que hacer es separar la tuple .

Y quiero poder usar estos valores por separado.

Así que solo toma los valores de la tuple .

La forma más fácil de hacerlo es desempacando:

a, b = select_choice()


Creo que lo que quieres es una tupla. Si usa return (i, card) , puede obtener estos dos resultados de la siguiente manera:

i, card = select_choice()


No puede devolver dos valores, pero puede devolver una tuple o una list y descomprimirla después de la llamada:

def select_choice(): ... return i, card # or [i, card] my_i, my_card = select_choice()

El return i, card 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 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 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 una tupla nombrada . 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 . 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)


Puede devolver más de un valor usando la lista también. Verifica el código a continuación

def newFn(): #your function result = [] #defining blank list which is to be return r1 = ''return1'' #first value r2 = ''return2'' #second value result.append(r1) #adding first value in list result.append(r2) #adding second value in list return result #returning your list ret_val1 = newFn()[1] #you can get any desired result from it print ret_val1 #print/manipulate your your result


Y esta es una alternativa. Si regresa como una lista, entonces es simple obtener los valores.

def select_choice(): ... return [i, card] values = select_choice() print values[0] print values[1]


def test(): .... return r1, r2, r3, .... >> ret_val = test() >> print ret_val (r1, r2, r3, ....)

ahora puedes hacer todo lo que quieras con tu tupla.


def test(): r1 = 1 r2 = 2 r3 = 3 return r1, r2, r3 x,y,z = test() print x print y print z > test.py 1 2 3