Funciones anidadas, introducción a los arreglos, ordenación de arreglos, métodos unidimensionales búsqueda de arreglo. Verastegui Varillas Cesar Galy- Loayza Ramos Juan Rogelio- Sifuentes Flores Yúnior AngelCarrión Cárcamo Eduardo Paolo- De la Cruz Maguiña Anthony- Quispe Vásquez Juan Rodolfo. FUNCIONES ANIDADAS ¿Qué son las funciones anidadas? Una función anidada es una función que se declara dentro de otra función. En otras palabras, una función está contenida dentro del cuerpo de otra. Este tipo de diseño introduce una estructura jerárquica en el código, donde la función interna solo puede ser invocada desde dentro de la función que la contiene. Ejemplo básico: def funcion_externa (): print("Soy la función externa") def funcion_anidada (): print ("Soy la función anidada") funcion_anidada () Ejemplo de acceso al ámbito de la función exterior: def funcion_externa(x): def funcion_anidada(y): return x + y return funcion_anidada En este ejemplo, la función anidada tiene acceso a la variable x de la función externa. Este es un ejemplo sencillo de cómo una función anidada puede capturar y usar variables del entorno en el que fue definida. Clausuras (Closures) Las clausuras son un concepto estrechamente relacionado con las funciones anidadas. Ocurre cuando una función anidada recuerda el entorno en el que fue creada, incluso si la función externa ha finalizado su ejecución. Esto significa que las variables locales de la función externa permanecen "vivas" y accesibles para la función anidada, aunque el flujo de la función externa haya terminado. Ejemplo de clausura: funcion_externa () En este ejemplo, la función funcion_anidada está definida dentro de funcion_externa y solo puede ser llamada desde dentro de esta última. Si intentaras llamar a funcion_anidada () fuera de funcion_externa (), obtendrías un error, ya que la función anidada solo existe dentro del contexto de la función externa. Ámbito de las variables en funciones anidadas Uno de los aspectos más interesantes de las funciones anidadas es cómo manejan el ámbito de las variables. Las funciones anidadas tienen acceso a las variables definidas en la función que las contiene, pero no al revés. Este concepto es fundamental para entender cómo funcionan las clausuras (closures), que se explicarán más adelante. def hacer_multiplicador(n): def multiplicador(x): return x * n return multiplicador doble = hacer_multiplicador(2) triple = hacer_multiplicador(3) print(doble(5)) # Output: 10 print(triple(5)) # Output: 15 En este ejemplo, la función multiplicador recuerda el valor de n incluso después de que la función hacer_multiplicador haya terminado. El objeto doble almacena la clausura que contiene el valor 2, mientras que triple almacena el valor 3. Las clausuras son muy útiles para crear funciones personalizadas o que conserven un estado. la contiene, proporcionando una capa adicional de control y seguridad sobre el flujo de datos. 3. Reutilización de Código: Las funciones anidadas permiten evitar la duplicación de código, ya que las operaciones comunes pueden ser encapsuladas dentro de una función mayor y reutilizadas en varios puntos dentro de esa misma función. 4. Control sobre el Ámbito: Las funciones anidadas tienen acceso a las variables de su función exterior, lo que permite manipular datos de manera más controlada. Esto es particularmente útil cuando se quiere evitar la creación de variables globales. Aplicaciones y Usos Comunes de las Funciones Anidadas 1. Decoradores en Python: Los decoradores son una aplicación muy común de las funciones anidadas. Un decorador es una función que toma otra función como argumento y devuelve una nueva función que usualmente extiende o modifica el comportamiento de la función original. Ejemplo de decorador: def decorador(func): def funcion_modificada(): print("Antes de ejecutar la función") Desventajas Potenciales de Usar Funciones Anidadas 1. Complejidad: Si se abusa de las funciones anidadas, el código puede volverse difícil de leer y mantener. Una excesiva anidación puede complicar el seguimiento del flujo del programa, haciendo más difícil detectar errores o comprender la lógica. 2. Rendimiento: En algunos casos, las funciones anidadas pueden tener un impacto en el rendimiento, especialmente si se crean y eliminan de manera frecuente. En ciertos lenguajes de programación, cada vez que se ejecuta la función externa, se crea un nuevo contexto de ejecución para la función anidada, lo que puede consumir recursos adicionales. 3. Dificultad para Depurar: Las funciones anidadas pueden hacer más difícil la depuración del código, ya que el seguimiento de los errores y de las variables en múltiples niveles de funciones puede complicarse. func() print("Después de ejecutar la función") return funcion_modificada @decorador def funcion_simple(): print("Esta es una función simple") funcion_simple() En este caso, funcion_modificada es una función anidada que envuelve el comportamiento de funcion_simple. Los decoradores permiten extender el comportamiento de las funciones de una manera modular y reutilizable. Beneficios de Usar Funciones Anidadas 1. 2. Modularidad: Al usar funciones anidadas, se puede dividir el código en secciones más manejables, cada una con una responsabilidad clara. Esto facilita el mantenimiento y la comprensión del código. Encapsulamiento: Al definir una función dentro de otra, se puede restringir el acceso a la función anidada desde fuera de la función que [1] M. Lutz, Learning Python, Estados Unidos : 5th Edition, 2013.