valor - retornar una lista en python
¿Cuál es la mejor manera de devolver múltiples valores de una función en Python? (5)
Tengo una función donde necesito hacer algo con una cuerda. Necesito la función para devolver un booleano que indique si la operación tuvo éxito o no, y también necesito devolver la cadena modificada.
En C #, usaría un parámetro out para la cadena, pero no hay equivalente en Python. Todavía soy muy nuevo en Python y lo único que se me ocurre es devolver una tupla con la cadena booleana y modificada.
Pregunta relacionada: ¿es pitónico que una función devuelva valores múltiples?
¿Por qué no lanzar una excepción si la operación no fue exitosa? Personalmente, tiendo a opinar que si necesita devolver más de un valor de una función, debería reconsiderar si está haciendo las cosas correctamente o si usa un objeto.
Pero más directamente al punto, si lanza una excepción, los está forzando a enfrentar el problema. Si intentas devolver un valor que indique falla, es muy posible que alguien no pueda verificar el valor y terminar con algunos errores potencialmente difíciles de depurar.
Devolver una tupla es la forma habitual de hacer esto en Python.
Devuelve una tupla.
def f(x):
# do stuff
return (True, modified_string)
success, modified_string = f(something)
Lanzar una excepción por falla es una buena manera de proceder, y si devuelve una gran cantidad de valores diferentes, puede devolver una tupla. Para el caso específico que está citando, a menudo tomo un enfoque intermedio: devolver la cadena modificada en caso de éxito y devolver None en caso de error. Soy un programador de C no reconstruido suficiente como para querer devolver un puntero NULL a la falla de char.
Si estuviera escribiendo una rutina para ser utilizada como parte de una biblioteca más grande y consumida por otros desarrolladores, lanzaría una excepción en caso de error. Cuando me coma mi propia comida para perros, probablemente regrese tipos diferentes y la prueba a la vuelta.
def f(in_str):
out_str = in_str.upper()
return True, out_str # Creates tuple automatically
succeeded, b = f("a") # Automatic tuple unpacking