Ignorar el valor de retorno múltiple de Python


Answers

Puede usar x = func()[0] para devolver el primer valor, x = func()[1] para devolver el segundo, y así sucesivamente.

Si desea obtener múltiples valores a la vez, use algo como x, y = func()[2:4] .

Question

Supongamos que tengo una función de Python que devuelve múltiples valores en una tupla:

def func():
    return 1, 2

¿Hay una buena manera de ignorar uno de los resultados en lugar de simplemente asignar a una variable temporal? Digamos que si solo estuviera interesado en el primer valor, ¿hay alguna manera mejor que esto?

x, temp = func()



La mejor solución es, probablemente, nombrar cosas en lugar de devolver tuplas sin sentido. A menos que haya alguna lógica detrás del orden de los artículos devueltos.

def func():
    return {'lat':1, 'lng':2}

latitude = func()['lat']
print(latitude)

Incluso podría usar namedtuple si desea agregar información adicional sobre lo que está devolviendo:

from collections import namedtuple 
Coordinates = namedtuple('Coordinates', ['lat', 'lng'])

def func():
    return Coordinates(lat=1, lng=2)

latitude = func().lat
print(latitude)

Si las cosas que devuelve suelen estar juntas, puede ser una buena idea incluso definir una clase para ello.




Tres elecciones simples

Obvio

x, _ = func()

x, junk = func()

Horrible

x = func()[0]

Y hay formas de hacer esto con un decorador.

def val0( aFunc ):
    def pick0( *args, **kw ):
        return aFunc(*args,**kw)[0]
    return pick0

func0= val0(func)



Recuerde, cuando devuelve más de un artículo, realmente está devolviendo una tupla. Entonces puedes hacer cosas como esta:

def func():
    return 1, 2

print func()[0] # prints 1
print func()[1] # prints 2



Esta parece ser la mejor opción para mí:

val1, val2, ignored1, ignored2 = some_function()

No es críptico o feo (como el método func () [index]), y establece claramente su propósito.