Las funciones son bloques de código reutilizables que realizan una tarea específica. En Python, las funciones se definen utilizando la palabra clave def, seguida del nombre de la función y paréntesis que pueden incluir parámetros. Aquí tienes un ejemplo básico:
def saludar(nombre):
print(f"Hola, {nombre}!")
saludar("Alice") # Salida: Hola, Alice!En este ejemplo, hemos definido una función llamada saludar que toma un parámetro nombre y imprime un saludo personalizado. Luego, llamamos/invocamos a la función pasando el nombre "Alice" como argumento.
Las funciones pueden devolver valores utilizando la palabra clave return. Aquí tienes un ejemplo de una función que suma dos números y devuelve el resultado:
def sumar(a, b):
return a + b
resultado = sumar(5, 3)
print(f"El resultado de la suma es: {resultado}") # Salida: El resultado de la suma es: 8En este caso, la función sumar toma dos parámetros a y b, y devuelve su suma. Luego, almacenamos el resultado en la variable resultado y lo imprimimos.
En Python, en caso de que una función no tenga una declaración return, devolverá automáticamente None. Aquí tienes un ejemplo:
def funcion_sin_retorno():
print("Esta función no devuelve nada.")
resultado = funcion_sin_retorno()
print(f"El resultado de la función es: {resultado}") # El resultado será None porque la función no tiene una declaración returnEn el caso en que se quiera devolver múltiples valores desde una función, se pueden retornar como una tupla. Aquí tienes un ejemplo:
def operaciones(a, b):
suma = a + b
resta = a - b
return suma, resta
resultado_suma, resultado_resta = operaciones(10, 5)
print(f"Suma: {resultado_suma}, Resta: {resultado_resta}") # Salida: Suma: 15, Resta: 5Hasta ahora hemos visto funciones con parámetros obligatorios o posicionales. Sin embargo, Python también permite definir parámetros opcionales con valores predeterminados. Aquí tienes un ejemplo:
def saludar(nombre, mensaje="¡Hola!"):
print(f"{mensaje}, {nombre}!")
saludar("Alice") # Salida: ¡Hola!, Alice!
saludar("Bob", "Buenos días") # Salida: Buenos días, Bob!Pueden mezclarse parámetros obligatorios y opcionales, pero los parámetros opcionales deben ir al final de la lista de parámetros. Algunas de las normas a tener en cuenta con los parámetros son:
- Los parámetros pueden ser posicionales o con nombre.
- Los parámetros con valores por defecto deben ir al final de la lista de parámetros, tras los parámetros obligatorios o posicionales.
- Los valores por defecto se evalúan en el momento de la definición de la función, no en el momento de la llamada.
- no pueden definirse dos parámetros con el mismo nombre
def saludar(nombre, mensaje="¡Hola!"):
print(f"{mensaje}, {nombre}!")
saludar("Alice") # Salida: ¡Hola!, Alice!
saludar("Bob", "Buenos días") # Salida: Buenos días, Bob!Además, las funciones pueden aceptar un número variable de argumentos utilizando *args para argumentos posicionales y **kwargs para argumentos con nombre. Aquí tienes un ejemplo:
def mostrar_info(*args, **kwargs):
print("Argumentos posicionales:")
for arg in args:
print(f" - {arg}")
print("Argumentos con nombre:")
for key, value in kwargs.items():
print(f" - {key}: {value}")
mostrar_info("Python", "Java", "JavaScript", lenguaje="Python", version="3.9")En este ejemplo, la función mostrar_info puede aceptar cualquier cantidad de argumentos posicionales y con nombre, y los imprime en la consola.
Hay que dejar claro distinta terminología:
- Definir una función: Crear una función con un nombre y un bloque de código asociado.
- Llamar/invocar a una función: Ejecutar la función utilizando su nombre y proporcionando los argumentos necesarios.
- Parámetros: Variables que se definen en la declaración de la función y que reciben los valores cuando se llama a la función.
- Argumentos: Valores que se pasan a la función cuando se llama/invoca. Pueden ser posicionales o con nombre.
- Valor de retorno: El valor que una función devuelve al finalizar su ejecución, utilizando la palabra clave
return. - Ámbito de las variables: El contexto en el que una variable es accesible. Las variables definidas dentro de una función tienen un ámbito local y no son accesibles fuera de esa función, a menos que se utilice la palabra clave
globalpara declarar una variable global.
Las Docstrings son cadenas de texto que se utilizan para documentar funciones, clases y módulos en Python. Se colocan justo después de la definición de la función y se encierran entre triples comillas ("""). Aquí tienes un ejemplo:
def sumar(a, b):
"""Suma dos números."""
return a + b
print(sumar.__doc__) # Salida: Suma dos números.En este ejemplo, la Docstring describe brevemente lo que hace la función sumar. Puedes acceder a la Docstring utilizando el atributo __doc__ de la función. En pycharm, al colocar el cursor sobre el nombre de la función, se mostrará la Docstring como una ayuda emergente.
Además, las Docstrings deben incluir información más detallada sobre los parámetros y el valor de retorno de la función. Aquí tienes un ejemplo más completo:
def sumar(a, b):
"""Suma dos números.
Parámetros:
a (int): El primer número.
b (int): El segundo número.
Retorna:
int: La suma de a y b.
"""
return a + b- Usa nombres descriptivos para las funciones y los parámetros.
- El nombre de una función debe ser un verbo que describa la acción que realiza.
- Documenta tus funciones utilizando docstrings para explicar su propósito, parámetros y valor de retorno.
- Evita funciones demasiado largas; divide el código en funciones más pequeñas y manejables.
- Utiliza valores predeterminados para parámetros opcionales cuando sea apropiado.
- Maneja los errores y excepciones dentro de las funciones para mejorar la robustez del código.
- Prueba tus funciones de manera independiente para asegurarte de que funcionan correctamente.
Realiza los siguientes ejercicios para practicar la definición y el uso de funciones en Python:
- Define una función llamada
es_parque tome un número entero como parámetro y devuelvaTruesi el número es par yFalsesi es impar. Invócala con diferentes números y muestra los resultados. - Crea una función llamada
factorialque calcule el factorial de un número entero no negativo. Utiliza un bucle para calcular el factorial y devuelve el resultado. Prueba la función con varios valores. - Define una función llamada
fibonaccique genere una lista con los primerosnnúmeros de la secuencia de Fibonacci. La función debe tomar un parámetrony devolver la lista correspondiente. Invoca la función con diferentes valores deny muestra los resultados. - Crea una función llamada
es_palindromoque verifique si una cadena de texto es un palíndromo (se lee igual de izquierda a derecha que de derecha a izquierda). La función debe ignorar espacios y mayúsculas/minúsculas. Prueba la función con varias cadenas. - Define una función llamada
calcular_area_circuloque tome el radio de un círculo como parámetro y devuelva el área del círculo utilizando la fórmulaárea = π * radio^2. Utiliza la constantemath.pipara obtener el valor de π. Invoca la función con diferentes radios y muestra los resultados. - Crea una función llamada
contar_vocalesque tome una cadena de texto como parámetro y devuelva el número de vocales presentes en la cadena. La función debe contar tanto vocales mayúsculas como minúsculas. Prueba la función con varias cadenas. - Define una función llamada
ordenar_listaque tome una lista de números como parámetro y devuelva una nueva lista con los números ordenados de menor a mayor. Utiliza el método de ordenación incorporado de Python. Invoca la función con diferentes listas y muestra los resultados. - Crea un programa que muestre el menú con cinco opciones (del 1 al 5): sumar, restar, multiplicar, dividir, y salir. El usuario debe poder seleccionar una opción y proporcionar los números necesarios para realizar la operación. Muestra el resultado de la operación hasta que se seleccione la opción de salir. Evita el uso de variables globales y utiliza funciones para cada operación. Evita los errores en la medida de lo posible.