programación y manejo de funciones en Python

programación y manejo de funciones en Python

Vamos a aprender a trabajar con las funciones en Python, lo primero que vamos a hacer es ver como las declaramos y después como enviar valores a esas funciones para que realicen tareas específicas a través de los parámetros. Además trabajaremos como poder retornar los valores de las funciones y controlar el flujo de nuestro programa.

¿Qué es una función en Python?

La función es un conjuto de códigos que se ejecutan cuando se le llama y realiza una determinada acción. Las funci0ones nos permiten organizar nuestro código, reutilizarlo y hacerlo más legible siendo más compacto. Dando diferentes valores de entrada a la función puede reutilizarse muchas veces y tomar la salida basada en los valores dados. Si se definen correctamente, el programa puede ser más flexible.

Cómo definir una función:

Para definir una función en Python, utilizamos la palabra clave def, seguida del nombre de la función y paréntesis que pueden contener parámetros. El cuerpo de la función se escribe con una sangría.

Sintaxis:

def nombre_de_la_funcion(parametro1, parametro2,...):
    # Cuerpo de la función
    # Código que realiza la tarea
    return resultado

El nombre de la funcíon se escribe con la palabra clave def, seguido del nombre de la función y paréntesis que pueden contener parámetros y los dos puntos puntos. El cuerpo de la función se escribe con una sangría. Así como se define un conjunto de códigos de bajo un nombre. Las funciones también las definimos bajo un nombre y luego las llamamos por ese nombre para que se ejecuten. La llamada a la función se realiza escribiendo el nombre de la función seguido de paréntesis que pueden contener argumentos.

def saludar(nombre: str) -> None:
    print(f"Hola, {nombre}!")
saludar("Javi")  # Llama a la función con el argumento "Javi"

Envío de valores

Una función puede tomar los datos como entrada a través de sus paréntesis, estos valores se llaman parámetros. Los parámetros se declaran en el momento de la definición de la función. En el ejemplo anterior, la función de saludar, podemos cambiar la función para impirmir algo dado por el usuario a través de parámetros. Lo cierto que no tenemos un límite en el número de parámetros que podemos enviar a una función, pero es recomendable no abusar de ellos para mantener la legibilidad del código. Los valores siempre los enviamos de forma ordenada, por ejemplo, si el primer parámetro es un nombre lo que le enviemos sería para el primer parámetro y así sucesivamente. Podríamos dar el valor en diferente orden pero deberíamos especificar el nombre del parámetro al que le estamos dando el valor.

def nombre_edad(a: str, b: int) -> str:
    return print(f"Tu nombre es {a} y tienes {b} años.")
nombre_edad("Javi", 30)  # Llama a la función con los argumentos "Javi" y 30

Retorno de valores

Las funciones pueden devolver o retornar una salida. La palabra clave que utilizamos para devolver un valor es return. Cuando una función encuentra una declaración de retorno, la función termina su ejecución y devuelve el valor especificado. Podemos devolver cualquier tipo de dato, como números, cadenas, listas, diccionarios, etc. Si no se especifica una declaración de retorno, la función devolverá None por defecto.

Sintaxis: def fun_return(): Cuerpo de la función return valor_de_retorno

def sumar(a: int, b: int) -> int:
    return a + b

Los dos números son los valores que enviamos a la función en el momento de la llamada y el resultado de la suma es el valor que retorna la función. En este caso estamos devolviendo un número entero pero podría ser guardado en una variable.

def sumar(a: int, b: int) -> int:
    suma = a + b
    return suma
print(sumar(5, 3))  # Salida: 8

Retornando valores con condiciones

Las funciones puden devolver los valores basándose en condiciones. Podemos utilizar declaraciones condicionales dentro de la función para determinar qué valor devolver.

def evaluar_numero(num: int) -> str:
    if num > 0:
        return "Positivo"
    elif num < 0:
        return "Negativo"
    else:
        return "Cero"
print(evaluar_numero(10))  # Salida: Positivo
print(evaluar_numero(-5))  # Salida: Negativo
print(evaluar_numero(0))   # Salida: Cero

argumento y parámetros en funciones Python

Los términos argumento y parámetro a menudo se usan indistintamente, pero tienen significados distintos en el contexto de las funciones en Python.

def saludar(nombre: str) -> None:  # 'nombre' es un parámetro
    print(f"Hola, {nombre}!")
saludar("Javi")  # 'Javi' es un argumento

Las funciones retornando funciones

Una función peude devolver otra función ya definida dentro de la función.

Sintaxis: def duncion_externa(parametro1): declaraciones def funcion_interna(parametro2): declaraciones return valor

def crear_multiplicador(factor: int) -> callable:
    def multiplicar(numero: int) -> int:
        return numero * factor
    return multiplicar
duplicar = crear_multiplicador(2)
triplicar = crear_multiplicador(3)
print(duplicar(5))  # Salida: 10
print(triplicar(5))  # Salida: 15

En este ejemplo, la función crear_multiplicador devuelve una función multiplicar que multiplica un número por un factor dado. Podemos crear diferentes funciones de multiplicación pasando diferentes factores a crear_multiplicador.

Funciones recursivas

Si una función devuelve la misma función entonces a esto se le llama las funciones recursivas o recursión. El contro se mantiene como una rotación hasta que podamos hacer que cumpla con la condición de rotura declarada.

def factorial(n: int) -> int:
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
print(factorial(5))  # Salida: 120

En este ejemplo, la función factorial se llama a sí misma para calcular el factorial de un número. La condición base es cuando n es igual a 0, en cuyo caso devuelve 1.

Excepciones en funciones

Si lso programas en Python termianna con unerror, finalizarán y mostrarán el error por al terminal. Para los programas en Python tenemos la suerte y posibilidad de ser apturados usando algunos objetos que nos permiten manejar las excepciones. Estos objetos son try, except, else y finally.

Sintaxis: try: declaraciones except TipoDeError: declaraciones

Las sentencias que se encuentran dentro del bloque try son las que pueden generar una excepción. Si se produce una excepción, el flujo del programa se transfiere al bloque except, donde podemos manejar el error de manera adecuada.

def dividir(a: int, b: int) -> float:
    try:
        resultado = a / b
    except ZeroDivisionError:
        return "Error: División por cero no permitida."
    else:
        return resultado
print(dividir(10, 2))  # Salida: 5.0
print(dividir(10, 0))  # Salida: Error: División por cero no permitida.

En este ejemplo, la función dividir intenta dividir dos números. Si el segundo número es cero, se captura la excepción ZeroDivisionError y se devuelve un mensaje de error en lugar de que el programa falle.

Aserciones en funciones

En python los errores en lógica del programa pueden ser señalados con declaraciones de aserción. Estos errores de aserción pueden ser capturados con la plabra clave assert. Si la condición evaluada es falsa, se genera una excepción AssertionError.

Sintaxis: expresion assert, argumentos

def calcular_raiz_cuadrada(numero: float) -> float:
    assert numero >= 0, "El número debe ser no negativo."
    return numero ** 0.5
print(calcular_raiz_cuadrada(16))  # Salida: 4.0
print(calcular_raiz_cuadrada(-4))  # Lanza AssertionError: El número debe ser no negativo.

En este ejemplo, la función calcular_raiz_cuadrada utiliza una aserción para asegurarse de que el número proporcionado sea no negativo antes de calcular su raíz cuadrada. Si se pasa un número negativo, se lanza una excepción AssertionError con un mensaje descriptivo.

Conclusión

Las funciones son una parte fundamental de la programación en Python. Nos permiten organizar nuestro código, reutilizarlo y hacerlo más legible. Aprender a definir, llamar y manejar funciones es esencial para cualquier programador que desee escribir código eficiente y mantenible. Además, el manejo de excepciones y aserciones dentro de las funciones nos permite crear programas más robustos y confiables. Practicar la creación y uso de funciones nos ayudará a mejorar nuestras habilidades de programación en Python.

¿Listo para hacer crecer tu negocio?

Analicemos tu proyecto y definamos la estrategia perfecta para alcanzar tus objetivos

Solicitar consultoría gratuita