Devolución de valores
En una función se pueden devolver valores utilizando la palabra clave return. Cuando una función llega a una línea con return, se interrumpe su ejecución y devuelve el valor especificado. Se pueden devolver uno o más valores.
Veamos un ejemplo sencillo de una función que devuelve un valor.
def sumar(a, b):
resultado = a + b
return resultado
Aquí, la función sumar recibe dos argumentos, a y b, los suma y devuelve el valor resultante con la instrucción return.
Si llamas a esta función así:
suma = sumar(5, 3)
print(suma)
La salida será 8, porque el valor retornado por la función se almacena en la variable suma.
Devolución de múltiples valores
En Python, también es posible devolver varios valores separados por comas. Estos valores devueltos normalmente se entregan como una tupla.
def operar(a, b):
suma = a + b
resta = a - b
return suma, resta
Cuando llamas a la función:
resultado_suma, resultado_resta = operar(5, 3)
print(resultado_suma) # 8
print(resultado_resta) # 2
En este caso, la función operar devuelve dos valores, que después pueden ser capturados en dos variables distintas.
Resumiendo, para devolver valores en una función, usas la palabra clave return, y puedes devolver uno o varios valores según necesites.
Early return
El patrón retorno temprano (early return) consiste en verificar ciertas condiciones al principio de la función, y si estas se cumplen, la función finaliza inmediatamente devolviendo un valor, sin seguir ejecutando el resto del código.
El early return ayuda a simplificar el código al evitar bloques anidados innecesarios y mejorar su legibilidad.
def dividir(a, b):
# Si b es 0, devolvemos un aviso y finalizamos la función
if b == 0:
return "Error: no se puede dividir por cero."
# Si b no es 0, realizamos la división
return a / b
En este ejemplo, la función dividir verifica si el valor de b es cero. Si es así, devuelve un mensaje de error inmediatamente usando el early return, evitando que se ejecute el código que haría la división. Esto ayuda a prevenir errores y a mejorar la claridad del código.
Finalización de funciones
En Python, puedes usar la palabra clave return para finalizar una función en cualquier punto de su código. Si no le especificas un valor para devolver, la función finaliza y devuelve implícitamente None.
Por ejemplo, la siguiente función utiliza return para finalizar la ejecución sin devolver ningún valor:
def verificar_numero(numero):
if numero < 0:
print("El número es negativo.")
return # La función finaliza aquí sin devolver nada.
print("El número es positivo o cero.")
# Llamadas a la función
verificar_numero(-5) # Mensaje: El número es negativo.
verificar_numero(3) # Mensaje: El número es positivo o cero.
Devolución del mismo tipo de datos
En Python, es una buena práctica que una función devuelva siempre el mismo tipo de datos o None. La razón principal es mantener la coherencia y evitar comportamientos inesperados en el programa. La mezcla de tipos de datos devueltos por una función puede dificultar la comprensión, el mantenimiento y la depuración del código. Aquí están las razones más importantes:
Si una función puede devolver diferentes tipos de datos dependiendo de las condiciones, el programador que llame a la función tendrá que comprobar siempre el tipo de dato devuelto antes de usarlo. Esto hace el código más complicado. Aquí un ejemplo de mala práctica:
def ejemplo(num):
if num > 0:
return "positivo"
elif num == 0:
return 0
else:
return None
resultado = ejemplo(5)
if isinstance(resultado, str):
print("Es una cadena de texto.")
elif isinstance(resultado, int):
print("Es un número.")
else:
print("Es None.")
Devolver el mismo tipo de datos o None hace que el código sea:
- Más previsible: Es más fácil de usar y entender.
- Más robusto: Evitas errores inesperados cuando usas los valores devueltos.
- Más mantenible: Facilita el desarrollo futuro y la depuración.
- Compatible con las buenas prácticas modernas: Como el uso de anotaciones de tipo.