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.




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



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)



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.




Links